继续畅通工程

来源:互联网 发布:淘宝v任务平台 编辑:程序博客网 时间:2024/04/29 21:17

继续畅通工程

// File Name: hdu1879.cpp// Author: rudolf// Created Time: 2013年04月27日 星期六 12时35分11秒#include<vector>#include<list>#include<map>#include<set>#include<deque>#include<stack>#include<bitset>#include<algorithm>#include<functional>#include<numeric>#include<utility>#include<sstream>#include<iostream>#include<iomanip>#include<cstdio>#include<cmath>#include<cstdlib>#include<cstring>#include<ctime>using namespace std;const int maxn=15005;int fa[105];int x1,x2,va,d;struct node{int x,y,value;}edge[maxn];int find(int x){return fa[x]=x==fa[x]?x:find(fa[x]);}/*bool  cmp(const node a, const node b){return a.value<b.value;}*/int cmp(const void *a,const void *b){return ((node*)a)->value-((node*)b)->value;}int main(){int Case;while(cin>>Case,Case){//int k=0;for( int i = 0; i <= Case; i++)fa[ i ] = i;int m=( Case - 1 ) * Case / 2;for( int i = 1; i <= m; i++ ){cin >> edge[i].x >> edge[i].y >> edge[i].value >> d;if( d )fa[ find(edge[i].x) ] = find(edge[i].y);}qsort(edge, m ,sizeof(edge[1]),cmp);//sort(edge,edge+m,cmp);int sum = 0;for(int i=1;i <= m; i++){x1 = find( edge[ i ].x );x2 = find( edge[ i ].y );if( x1 != x2 ){fa[ x1 ] = x2;sum += edge[ i ].value;}}int ans = 0;/*for(int i = 1;i <= Case;i++)if( fa[ i ] == i )ans++;*/cout << sum << endl;}return 0;}


原创粉丝点击