Kruskal poj 1287 示例 [ 实现用到并查集 ]
2013-01-17 18:08
393 查看
克鲁斯卡尔算法 (加边法)
G(V, E) 带权连通无向图
(1), 将 G 中的边按权值从小到大依次选取,若选取的边使生成树不构成回路,并入 TE 中。
(2), 从剩下的边中选取边,执行操作 (1), 如此进行下去,直到 TE 中包含 n-1 条边为止,此时的T,此时的 T ,即为最小生成树。
Kruskal 的实现需要用到并查集。
G(V, E) 带权连通无向图
(1), 将 G 中的边按权值从小到大依次选取,若选取的边使生成树不构成回路,并入 TE 中。
(2), 从剩下的边中选取边,执行操作 (1), 如此进行下去,直到 TE 中包含 n-1 条边为止,此时的T,此时的 T ,即为最小生成树。
Kruskal 的实现需要用到并查集。
#include <iostream> #include <string> #include <cstring> #include <cstdlib> #include <cstdio> #include <cmath> #include <vector> #include <stack> #include <deque> #include <queue> #include <bitset> #include <list> #include <map> #include <set> #include <iterator> #include <algorithm> #include <functional> #include <utility> #include <sstream> #include <climits> #include <cassert> #define BUG puts("here!!!"); using namespace std; const int N = 5005; int pre ; int n, m; struct Node { int u, v; int w; }e ; bool cmp(const Node a, const Node b) { return a.w < b.w; } void makeSet(int n) { for(int i = 0; i <= n; i++) { pre[i] = i; } } int findSet(int a) { if(pre[a] == a) return a; return pre[a] = findSet(pre[a]); } void kruskal() { int fu, fv, sum = 0, count = 0; sort(e, e+m, cmp); makeSet(n); for(int i = 0; i < m; i++) { fu = findSet(e[i].u); fv = findSet(e[i].v); if(fu != fv) { sum += e[i].w; count++; if(count == n-1) break; pre[fv] = fu; } } cout << sum << endl; } int main() { while(cin >> n, n) { cin >> m; for(int i = 0; i < m; i++) { cin >> e[i].u >> e[i].v >> e[i].w; } kruskal(); } return 0; }
相关文章推荐
- Kruskal poj 1287 示例 [ 实现用到并查集 ]
- Kruskal poj 1287 示例 [ 实现用到并查集 ]
- prim-普里姆 poj 1287 示例 [ 实现用到并查集 ]
- prim-普里姆 poj 1287 示例 [ 实现用到并查集 ]
- prim-普里姆 poj 1287 示例 [ 实现用到并查集 ]
- poj 1287 kruskal 并查集
- POJ1287 Networking (Kruskal与并查集求解最小生成树)
- POJ 1258,并查集使用的Kruskal方法简单使用
- POJ1861 Network(Kruskal)(并查集)
- poj 1287 MST(kruskal)
- POJ 1287:Networking(最小生成树Kruskal)
- poj 1287 Networking(kruskal || prim)
- POJ 1258,并查集使用的Kruskal方法简单使用
- hdu-1863畅通工程 最小生成树克鲁斯卡尔算法kruskal(并查集实现)&&prim普利姆算法实现
- POJ 1287 Networking (Kruskal)
- poj 1789 最小生成树 kruskal 并查集
- 最小生成树之Kruskal(并查集实现)
- POJ 1287:Networking(最小生成树Kruskal)
- 图论 生成树 POJ 1287 Networking(prim)( Kruskal)
- HDU 1233 (最小生成树) 用并查集实现kruskal