Uva1395 最小生成树
2016-10-15 04:00
323 查看
//Uva1395
//Kruskal算法按边权排序之后,选前面边构成最小生成树,用n记录已经加入并查集的节点数,当为num时停止,
//比较是否连接的节点数等于节点总数,不等就-1,相等输出最小生成度
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<cmath>
using namespace std;
const int maxn=10000;
struct Edge{
int l,r,w;
bool operator < (const Edge&rhs){
return w<rhs.w;
}
}edge[maxn];
int ufs[maxn];
int n,m,cnt;
int find(int u){
return ufs[u]==u? u:ufs[u]=find(ufs[u]);
}
int ans;
void Kruskal(){
sort(edge,edge+m);
int aa=m-n+2;//需要n-1垫底,但是以n-1的开头作为一个所以加一
for(int i=0;i<aa;i++){
for(int i=0;i<maxn;i++)ufs[i]=i;
cnt=1;
for(int j=i;j<m;j++){
int x=find(edge[j].l);
int y=find(edge[j].r);
if(x!=y){
ufs[x]=y;
cnt++;
if(cnt==n){
ans=min(ans,abs(edge[j].w-edge[i].w));
// printf("%d %d\n",edge[j].w,edge[i].w);
break;
}
}
}
}
}
int main(){
while(cin>>n>>m&&(n||m)){
//读入边
ans=100000;
for(int i=0;i<m;i++){
cin>>edge[i].l>>edge[i].r>>edge[i].w;
}
Kruskal();
if(ans==100000)cout<<"-1"<<endl;
else cout<<ans<<endl;
}
return 0;
}
//Kruskal算法按边权排序之后,选前面边构成最小生成树,用n记录已经加入并查集的节点数,当为num时停止,
//比较是否连接的节点数等于节点总数,不等就-1,相等输出最小生成度
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<cmath>
using namespace std;
const int maxn=10000;
struct Edge{
int l,r,w;
bool operator < (const Edge&rhs){
return w<rhs.w;
}
}edge[maxn];
int ufs[maxn];
int n,m,cnt;
int find(int u){
return ufs[u]==u? u:ufs[u]=find(ufs[u]);
}
int ans;
void Kruskal(){
sort(edge,edge+m);
int aa=m-n+2;//需要n-1垫底,但是以n-1的开头作为一个所以加一
for(int i=0;i<aa;i++){
for(int i=0;i<maxn;i++)ufs[i]=i;
cnt=1;
for(int j=i;j<m;j++){
int x=find(edge[j].l);
int y=find(edge[j].r);
if(x!=y){
ufs[x]=y;
cnt++;
if(cnt==n){
ans=min(ans,abs(edge[j].w-edge[i].w));
// printf("%d %d\n",edge[j].w,edge[i].w);
break;
}
}
}
}
}
int main(){
while(cin>>n>>m&&(n||m)){
//读入边
ans=100000;
for(int i=0;i<m;i++){
cin>>edge[i].l>>edge[i].r>>edge[i].w;
}
Kruskal();
if(ans==100000)cout<<"-1"<<endl;
else cout<<ans<<endl;
}
return 0;
}
相关文章推荐
- uva 1395 - Slim Span poj 3522 Slim Span(最小生成树算法)
- UVA1395 Slim Span(枚举最小生成树)
- uva1395 Kruskal算法求最小生成树
- UVa 1395 最小生成树
- UVA 1395 Slim Span 最小生成树
- UVa 1395 (最小生成树)
- [枚举最小瓶颈生成树]UVa-1395 - Slim Span(kruskal)
- UVA 1395 Slim Span 最小生成树
- UVA 1395 Slim Span (最小生成树,MST,kruscal)
- uva1395 - Slim Span(最小生成树)
- uva 1395 Slim Span[最小生成树]
- uva 1395 Slim Span (最小生成树||(最大边减最小边尽量小))
- 最小生成树(苗条生成树 uva 1395)
- uva1395 枚举不同区间的最小生成树
- UVa - 1395 - Slim Span(Kruskal算法+并查集,最小生成树)
- UVA - 1395 Slim Span (最小生成树Kruskal)
- UVa 1395 (最小生成树) Slim Span
- UVa 1395 Slim Span (最小生成树)
- 苗条的生长树slim span,uva1395——最小生成树,kruskal
- 例题11-2 UVA - 1395 Slim Span 苗条的生成树(Kruscal最小生成树)