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;
}
代码改变世界