kruskal_并查集_代码模板_hdu1232
2012-08-26 15:36
387 查看
kruskal代码模板
input
a_the number of verteices
b_the number of edges
v1_verteices
wi_the weight of each edge
hdu1232
input
a b v1 v2 w1 v2 v3 w2 ...
a_the number of verteices
b_the number of edges
v1_verteices
wi_the weight of each edge
#include<iostream> #include<string> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<ctype.h> #include<algorithm> #include<map> #include<vector> #include<set> #define MAX 100005 #define MOD 1000003 #define inf 100000000 #define eps 1e-9 #define pi acos(-1.0) #define LL long long #define I64 __int64 #define max(a, b) ((a) > (b) ? (a) : (b)) #define min(a, b) ((a) < (b) ? (a) : (b)) using namespace std; struct edge { int v1, v2, w; }; int edge_num, vertex_num; edge volume_e[30]; int father[30]; int cmp(edge a, edge b) { return a.w < b.w; } int find(int x) { int root = x; if(father[root] != root) root = father[root]; return root; } int judge(edge e) { if(find(e.v1) != find(e.v2)) return 1; return 0; } int main() { freopen("in.txt", "r", stdin); cin >> edge_num >> vertex_num;// the number of edge and vertex // v1, v2, weight for(int i = 0; i < edge_num; i++) scanf("%d %d %d", &volume_e[i].v1, &volume_e[i].v2, &volume_e[i].w); // initial for(int i = 1; i <= vertex_num; i++) father[i] = i; sort(volume_e, volume_e+edge_num, cmp); int sum = 0; for (int i = 0;i < edge_num;i ++) { int x = find (volume_e[i].v1); int y = find (volume_e[i].v2); if (x != y) { sum += volume_e[i].w; father[x] = y; } } printf ("%d\n", sum); } /* 5 5 1 2 2 2 3 3 1 4 1 3 4 2 4 5 4 */
hdu1232
using namespace std; int add; int f[100010]; int n, m; int findset(int x) { int set = x; while(f[set] != set) { set = f[set]; } return set; } void merge(int a, int b) { int x = findset(a); int y = findset(b); if(x != y) f[x] = y; } int main() { freopen("in.txt", "r", stdin); while(scanf("%d %d", &n, &m) == 2) { add = 0; if(n == 0) break; else if(m == 0) { add = n - 1; printf("%d\n", add); } else { for(int i = 1; i <= n; i++) f[i] = i; for(int i = 0; i < m; i++) { int a, b; scanf("%d %d", &a, &b); merge(a, b); } for(int i = 1; i <= n; i++) if(f[i] == i) add++; add--; printf("%d\n", add); } // memset(f, 0, sizeof(f)); } } /* 4 2 1 3 4 3 3 3 1 2 1 3 2 3 5 2 1 2 3 5 999 0 0 */
相关文章推荐
- kruskal_并查集_代码模板 &hdu1232
- hdu1232 畅通工程(并查集模板)
- 并查集模板代码
- 并查集--hdu1232(基本模板题)
- 模板-并查集(kruskal)
- 并查集入门与代码模板
- kruskal模板及例题(并查集)
- 并查集模板代码实现(非递归)
- 并查集(kruskal的核心思想)模板
- 写一个迷你版Smarty模板引擎,对认识模板引擎原理非常好(附代码)
- eclipse中添加Java代码注释模板
- PKU-2524-Ubiquitous Religions(并查集模板)
- 善用Eclipse的代码模板功能
- hdu1232 很不错 要看 并查集
- PLSQL:做实验代码模板
- Eclipse代码注释模板——code templates
- XOOPS - theme主题风格 - 模板代码、区块设置与页面效果之间的对应关系
- HDU 1213 How Many Tables(并查集模板)
- 驯服IDE之eclipse代码模板
- Eclipse Java代码注释模板的设置