并查集模板
2017-10-08 19:27
204 查看
HDU-1213
此题是一个并查集的模板题。并查集只能进行合并操作无法进行删除操作,并查集的两个主要功能。
1,查询元素a,b是否属于同一组。
2,合并元素a,b所在的组。
并查集感觉都挺简单的。
// // Created by luozujian on 17-10-8. // #include<cstdio> #include<algorithm> #include<cstdio> #include<iostream> using namespace std; const int maxn = 1e3+5; int par[maxn]; int n,m; bool a[maxn]; void init(int n) { for(int i=1;i<=n;i++) { par[i] = i; a[i] = false; } } int find(int x) { if(par[x] == x) { return x; } else { return par[x] = find(par[x]); //顺带进行的优化 } } void unit(int a,int b) { int x = find(a),y = find(b); if(x!=y) { par[x] = y; } } int main() { int t; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); init(n); for(int i=1;i<=m;i++) { int a,b; scanf("%d%d",&a,&b); unit(a,b); } for(int i=1;i<=n;i++) { a[find(i)] = true; } int ans = 0; for(int i=1;i<=n;i++) { if(a[i]) ans++; } printf("%d\n",ans); } return 0; }
相关文章推荐
- SDUTOJ [2801] 并查集模板
- HDU 1856 More is better(简单并查集) 【最大并查集人数模板】
- POJ - 2236 Wireless Network (并查集+自用模板v1.2)
- 模板:并查集
- 自己的 并查集 模板
- 并查集模板
- 【并查集】HDU1213How Many Tables【模板题】
- kruskal模板及例题(并查集)
- 模板-并查集
- HDU 1213 How Many Tables(模板——并查集)
- 并查集入门与代码模板
- POJ 2524 宗教信仰 并查集 基础模板
- 并查集模板题 HDU1856 More is better
- 模板 并查集
- P3367 并查集【模板】 洛谷
- 并查集模板
- SDUTOJ [2801] 并查集模板
- HDU ~ 1213 ~ How Many Tables (并查集模板题)
- 并查集模板[路径压缩]
- 算法模板——并查集 1