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;
}
代碼改變世界