HDU 1233(最小生成树,并查集)
2014-01-15 21:08
309 查看
这里使用kruskal:
#include <cstring> #include <cstdio> #include <queue> using namespace std; struct edge { int u, v, w; edge() {} edge(int _u, int _v, int _w) : u(_u), v(_v), w(_w) {} bool operator <(const edge& rhs) const { return w > rhs.w; } }; int set[101]; int find(int x) { return set[x] < 0 ? x : set[x] = find(set[x]); } int main() { int n, i, u, v, w, ans; while (scanf("%d", &n) != EOF && n) { priority_queue<edge> q; memset(set, -1, sizeof set); ans = 0; for (i = 1; i <= n*(n-1)/2; ++i) { scanf("%d %d %d", &u, &v, &w); q.push(edge(u, v, w)); } while (!q.empty()) { edge p = q.top(); q.pop(); u = find(p.u), v = find(p.v); if (u != v) { set[u] += set[v]; set[v] = u; ans += p.w; if (set[u] == -n) break; } } printf("%d\n", ans); } }
相关文章推荐
- HDU 1233 还是畅通工程 (最小生成树、并查集)
- HDU 1233 (最小生成树) 用并查集实现kruskal
- HDU 1233 还是畅通工程 最小生成树K算法 并查集
- HDU--1233:还是畅通工程 (并查集 & 最小生成树Prim)
- hdu-1233最小生成树并查集求解
- hdu 1233 还是畅通工程 Kruskal 最小生成树 并查集
- hdu 1233 还是畅通工程 Kruskal 最小生成树 并查集
- HDU 1233.还是畅通工程【最小生成树 kruskal算法(并查集)+prim算法】【1月8】
- hdu 1233(还是畅通工程)(prime算法,克鲁斯卡尔算法)(并查集,最小生成树)
- hdu 1233 还是畅通工程 Kruskal 最小生成树 并查集
- 【最小生成树】+【并查集】-HDU-1233-还是畅通工程
- HDU 1233 还是畅通工程 最小生成树Kruskal算法/并查集
- hdu 1233(还是畅通project)(prime算法,克鲁斯卡尔算法)(并查集,最小生成树)
- HDU 1233 最小生成树和并查集
- hdu 1233 还是畅通工程 (最小生成树,prim,优先队列,kruskal并查集)
- hdu 1233 还是畅通工程 最小生成树Kruskal算法(并查集)
- [HDU 1233] 还是畅通工程(最小生成树)
- HDU 1233-还是畅通工程(经典的最小生成树, Kruskal和prim算法)
- hdu 1879_并查集_最小生成树_Kruskal
- HDU 1232(最小生成树;并查集)