标签:
3 1 2 1 0 1 3 2 0 2 3 4 0 3 1 2 1 0 1 3 2 0 2 3 4 1 3 1 2 1 0 1 3 2 1 2 3 4 1 0
3 1 0
#include <cstdio> #include <cstring> #include <algorithm> #include <queue> #include <cmath> using namespace std; int per[1100]; int N, M; struct node{ int u, v, w; }; node edge[110000]; int cmp(node a, node b){ return a.w < b.w; } void init(){ for(int i = 1; i <= N; ++i) per[i] = i; } int find(int x){ if(x == per[x]) return x; return per[x] = find(per[x]); } bool join (int x, int y){ int fx = find(x); int fy = find(y); if(fx != fy){ per[fx] = fy; return true; } return false; } int main (){ while(scanf("%d", &N), N){ M = N * (N - 1) / 2; int flag; for(int i = 0; i < M; ++i){ scanf("%d%d%d%d", &edge[i].u, &edge[i].v, &edge[i].w, &flag); if(flag) edge[i].w = 0; } sort(edge, edge + M, cmp); int sum = 0; init(); for(int i = 0; i < M; ++i){ if(join(edge[i].u, edge[i].v)) sum += edge[i].w; } printf("%d\n", sum); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
HDU 1879--继续畅通工程【kruskal && 最小生成树 && 水题】
标签:
原文地址:http://blog.csdn.net/hpuhjh/article/details/47405089