hdu_1879 继续畅通工程
2015-04-25 17:09
381 查看
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; int n; int Father[5005]; struct node { int u,v,w,p; }; node edge[5005]; bool cmp(node a,node b) { return a.w<b.w; } void MakeSet() { for(int i=1; i<=n; i++) Father[i]=i; } int Find(int x) { if(x!=Father[x]) return Father[x]=Find(Father[x]); else return x; } void Union(int x,int y) { int a=Find(x); int b=Find(y); if(a!=b) Father[b]=a; } int main() { int t,i,j,u,v,w,p,sum; while(scanf("%d",&t)!=EOF) { if(t==0) break; n=t*(t-1)/2; sum=0; for(i=0; i<n; i++) { scanf("%d%d%d%d",&u,&v,&w,&p); edge[i].u=u; edge[i].v=v; edge[i].p=p; if(edge[i].p==1) edge[i].w=0; else edge[i].w=w; } sort(edge,edge+n,cmp); MakeSet(); for(j=0; j<n; j++) if(Find(edge[j].u)!=Find(edge[j].v)) { Union(edge[j].u,edge[j].v); sum=sum+edge[j].w; } printf("%d\n",sum); } return 0; }
相关文章推荐
- HDU 1879 继续畅通工程(最小生成树 Kruskal算法)
- HDU 1879 继续畅通工程
- hdu-1879-继续畅通工程(克鲁斯卡尔求最小生成树)
- HDU 1879 继续畅通工程(最小生成树)
- hdu 1879 继续畅通工程(图论:最小生成树)
- HDU 1879 继续畅通工程 (最小生成树)
- HDU 1879 继续畅通工程
- hdu 1879 继续畅通工程
- 【HDU 1879】继续畅通工程
- HDU 1879 继续畅通工程
- HDU 1879 继续畅通工程
- HDU-1879 继续畅通工程(Kruskal)(Prim省略)
- HDU1879--继续畅通工程(最小生成树)
- HDU:1879 继续畅通工程(kruskal)
- hdu-1879-继续畅通工程
- hdu 1879 继续畅通工程(最小生成树,基础)
- hdu1879 继续畅通工程 (prim)
- hdu 1879 继续畅通工程
- HDU 1879 继续畅通工程.
- HDU 1879 继续畅通工程