并查集 - 图论基础
2017-07-25 22:18:16
writer:pprp
定义:(来源于搜狗百科)并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。
作用:用来判断两个节点是否属于同一颗树;
操作:1,查找,Find
2,合并,Merge
#include <iostream> using namespace std; int parent[1000]; int Find(int x) { if(parent[x] == x) return x; else return parent[x] = Find(parent[x]); } void Merge(int a,int b) { int pa = Find(a); int pb = Find(b); if(pb < pa) swap(pb,pa); if(pa!=pb) parent[pa] = pb; } int main() { int n, m,cnt; while(cin >> n) { for(int i = 1; i <= n ; i++) parent[i] = i; cin >> m; while(m--) { int x, y; cin >> x >> y; Merge(x, y); } cnt = -1; for(int i = 1; i <= n; i++) if(parent[i] == i) cnt++; cout << cnt <<endl; } return 0; }
代码改变世界