HDU1233 还是畅通工程

来源:互联网 发布:全知之眼图片 编辑:程序博客网 时间:2024/05/16 14:50

畅通工程系列,中文题目就不解释意思了。

题目比较直白,直接最小生成树。

#include<iostream>#include<cstdio>#include<cstring>#include<functional>#include<algorithm>using namespace std;struct node{int from,to;int cost;}e[100*100+10];int fa[105];int n,m,i,sum;int cmp(struct node a,struct node b){return a.cost<b.cost;}void init(){sum=0;for(i=1;i<=n;i++)fa[i]=i;}int getfa(int x){if(x==fa[x])return x;elsereturn fa[x]=getfa(fa[x]);//return x==fa[x]?x:fa[x]=getfa(fa[x]);}int merge(int u,int v){int t1,t2;t1=getfa(u);t2=getfa(v);//printf("u=%d v=%d t1=%d t2=%d\n",u,v,t1,t2);if(t1!=t2){fa[t1]=t2;return 1;}return 0;}int main(){int t1,t2,t3;while(scanf("%d",&n),n){init();m=n*(n-1)/2;for(i=1;i<=m;i++){scanf("%d%d%d",&t1,&t2,&t3);e[i].from=t1;e[i].to=t2;e[i].cost=t3;}sort(e+1,e+m+1,cmp);for(i=1;i<=m;i++){if(merge(e[i].from,e[i].to)){sum+=e[i].cost;//printf("cost=%d\n",e[i].cost);}}printf("%d\n",sum);}}


原创粉丝点击