hdu 1223 minimum spanning tree

来源:互联网 发布:淘宝网家居装饰品 编辑:程序博客网 时间:2024/05/06 23:18

用kruskal 来了一发,卧槽,排序的时候把边的数目和点的数目搞混了,又wrong了


#include<bits/stdc++.h>using namespace std;int cot;int n;int sum;struct edge{int x;int y;int w;}a[100005];int fa[1056];void init(){int i;for(i=1;i<=n;i++)fa[i]=i;return ;}int  findd(int x){int s;for(s=x;s!=fa[s];s=fa[s]);int tmp;while(s!=x){tmp=fa[x];fa[x]=s;x=tmp;}return s;}bool cmp(edge a,edge b){return a.w<b.w;}void Union(edge he){int r1=findd(he.x);int r2=findd(he.y);if(r1!=r2){cot++;sum+=he.w;fa[r1]=r2;}return ;}void kruskal(){int i;init();sort(a,a+n*(n-1)/2,cmp);//一开始用的n,wrong还不知道怎么回事for(i=0;i<n*(n-1)/2;i++){Union(a[i]);if(cot==n-1)break;}return;}int main(){std::ios::sync_with_stdio(false);while(cin>>n){if(n==0)break;cot=0;sum=0;int i,j,k;int x,y,z;for(i=0;i<n*(n-1)/2;i++){cin>>x>>y>>z;a[i].x=x;a[i].y=y;a[i].w=z;}kruskal();cout<<sum<<endl;}}


0 0
原创粉丝点击