标签:des style blog http color os io strong
Description
Input
Output
Sample Input
Sample Output
1 #include<cstdio> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 int ans; 6 int father[2000],rank[2000];//父节点,深度记录(这道题没必要用深度记录) 7 //int max1; 8 struct Line{ 9 int first; 10 int last; 11 int cost; 12 }line[50000];//还没学会用数组来记录边,还是在用结构体做的,编程风格有待提高 13 int cmp(Line a,Line b){return a.cost<b.cost;}//排序的依据函数 14 int find(int x)//找点的父节点,把一条边的点搞到一个集合里面 15 { 16 if(father[x]!=x) 17 { 18 father[x]=find(father[x]);//这里有个优化,不会出现长链的情况,直接把father[x]=find[father[x]]; 19 } 20 return father[x]; 21 } 22 bool Union(int a,int b)//合并集合 23 { 24 int a1=find(a),b1=find(b); 25 if(a1==b1) return false;//如果是同一个父亲节点的,return false; 26 else{ 27 father[b1]=a1;//否则合并成一个集合 28 ans++; 29 rank[a1]+=rank[b1]; 30 if(max1<rank[a1]) max1=rank[a1]; 31 return true; 32 } 33 } 34 35 36 int main() 37 { 38 int a,b,c,n,m; 39 while(scanf("%d%d",&n,&m)!=EOF) 40 { 41 for(int i=0;i<n;i++) 42 { 43 father[i]=i; 44 rank[i]=1; 45 } 46 for(int i=1;i<=m;i++) 47 { 48 scanf("%d %d %d",&a,&b,&c); 49 line[i].first=a; 50 line[i].last=b; 51 line[i].cost=c; 52 53 } 54 sort(line+1,line+m+1,cmp); 55 max1=0; 56 int sum=0; 57 ans=0; 58 for(int i=1;i<=m;i++) 59 { 60 if(Union(line[i].first,line[i].last)) 61 sum+=line[i].cost; 62 } 63 if(ans==n-1) printf("%d\n",sum); 64 else printf("impossible\n"); 65 printf("\n"); 66 } 67 return 0; 68 }
A - Ice_cream’s world III,布布扣,bubuko.com
标签:des style blog http color os io strong
原文地址:http://www.cnblogs.com/angledamon/p/3909014.html