hdu 1879 继续畅通工程(图论:最小生成树)
2014-07-21 14:59
169 查看
简单的最小生成树
但是题目中有个要处理的小细节
对于已经修通的路,我们令它成本为0,在用Kruskal就很好些了
代码如下:
但是题目中有个要处理的小细节
对于已经修通的路,我们令它成本为0,在用Kruskal就很好些了
代码如下:
#include <cstdio> #include <iostream> #include <algorithm> #define MAXN 10010 #define LL long long using namespace std; int r[MAXN], p[MAXN], w[MAXN], u[MAXN], v[MAXN]; int n, cnt; int find(int x) { return x==p[x] ? x : p[x] = find(p[x]); } int cmp(int i, int j) { return w[i]<w[j]; } LL Kruskal() { LL ans = 0; int i, x, y, e; for(i=1; i<=n; ++i) p[i] = i; for(i=0; i<cnt; ++i) r[i] = i; sort(r, r+cnt, cmp); for(i=0; i<cnt; ++i) { e = r[i]; x = find(u[e]); y = find(v[e]); if(x != y) { p[x] = y; ans += w[e]; } } return ans; } int main(void) { int m, x, y, dis, fag; while(scanf("%d", &n) && n) { m = n*(n-1)/2; cnt = 0; while(m--) { scanf("%d%d%d%d", &x, &y, &dis, &fag); if(fag) dis = 0; u[cnt] = x; v[cnt] = y; w[cnt] = dis; cnt++; } cout << Kruskal() << endl; } return 0; }
相关文章推荐
- HDU1879 继续畅通工程 【图论】【最小生成树】【Kruskal】
- HDU 1879 继续畅通工程 (最小生成树)
- (step6.1.1)hdu 1879(继续畅通工程——最小生成树、kruscal)
- hdu1879 继续畅通工程(最小生成树)
- 【最小生成树+kruskal】杭电 hdu 1879 继续畅通工程
- hdu 1879 继续畅通工程 (并查集+最小生成树)
- HDU 1879 继续畅通工程 最小生成树之处理已建的边
- HDU-1879-继续畅通工程-最小生成树&邻接表
- hdu 1879 继续畅通工程最小生成树prim)
- HDU 1879 继续畅通工程 prim算法 最小生成树
- HDU 1879 继续畅通工程(最小生成树)
- hdu1879 继续畅通工程 (最小生成树之prim 算法)
- HDU 1879 继续畅通工程 最小生成树P算法
- HDU1879 继续畅通工程 【最小生成树Prim】
- hdu 1879——继续畅通工程 最小生成树
- hdu 1879 继续畅通工程 最小生成树
- hdu 1879 继续畅通工程 最小生成树入门模板题
- 【最小生成树】+【并查集】-HDU-1879-继续畅通工程
- hdu 1879 继续畅通工程 最小生成树
- hdu 1879 继续畅通工程 (最小生成树)