标签:
解题思路:基础的最小生成树
反思:不明白为什么i从1开始取,就一直WA,难道是因为村庄的编号是从0开始的吗
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1032 Accepted Submission(s): 335
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int pre[10010]; struct Edge { int u,v,w; } edge[10010]; bool cmp(Edge n1,Edge n2) { return n1.w<n2.w; } int find(int root) { return root == pre[root] ? root : pre[root] = find(pre[root]); } int unionroot(int x,int y) { int root1=find(x); int root2=find(y); if(root1==root2) return 0; pre[root1]=root2; return 1; } int main() { int n,m,i,j,tmp,x,y,ans; while(scanf("%d %d",&n,&m)!=EOF) { tmp=0; ans=0; for(i=0;i<=10010;i++) pre[i]=i; for(i=0;i<m;i++) scanf("%d %d %d",&edge[i].u,&edge[i].v,&edge[i].w); sort(edge,edge+m,cmp); for(i=0;i<m;i++) { x=find(edge[i].u); y=find(edge[i].v); if(unionroot(x,y)) { ans+=edge[i].w; tmp++; } } if(tmp!=n-1) printf("impossible\n"); else printf("%d\n",ans); printf("\n"); } }
HDU 2122 Ice_cream’s world III【最小生成树】
标签:
原文地址:http://www.cnblogs.com/wuyuewoniu/p/4250842.html