1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #define M 10005 5 using namespace std; 6 struct data 7 { 8 int u,v,w; 9 }a[M]; 10 int n,m,fa[M],sum; 11 bool cmp(data a1,data a2) 12 { 13 return a1.w<a2.w; 14 } 15 int find(int a1) 16 { 17 if(fa[a1]==a1) 18 return a1; 19 fa[a1]=find(fa[a1]); 20 return fa[a1]; 21 } 22 int main() 23 { 24 scanf("%d%d",&n,&m); 25 for(int i=1;i<=m;i++) 26 scanf("%d%d%d",&a[i].u,&a[i].v,&a[i].w); 27 sort(a+1,a+m+1,cmp); 28 for(int i=1;i<=n;i++) 29 fa[i]=i; 30 for(int i=1;i<=m;i++) 31 { 32 int q1=find(a[i].u),q2=find(a[i].v); 33 if(q1!=q2) 34 { 35 fa[q1]=q2; 36 sum=a[i].w; 37 } 38 } 39 printf("%d %d",n-1,sum); 40 return 0; 41 }
很显然题目描述就是求一个最小生成树
原文:http://www.cnblogs.com/xydddd/p/5236766.html