并查集模板
- 并查集依据树的数据结构建立
- 并查集主要有两个基本操作
- 一是 find 算法(查找树的根结点)
- 二是 union算法(将两个不同根结点树连接在一起)
- 各类的并查集题目主要围绕着这两个操作进行更改变化
基本函数以及初始化(部分取舍根据题目改变)
#include <iostream>
using namespace std;
int id[80];
int size[180];
int find(int p)
{
while (p != id[p])
{
id[p] = id[id[p]];
p = id[p];
}
return p;
}
void Union(int p,int q)
{
int i = find(p);
int j = find(q);
if(i == j) return;
if(size[i] < size[j])
{
id[i] = j;
size[j] += size[i];
}else
{
id[j] = i;
size[i] += size[j];
}
}
int main()
{
for(int i = 0; i < 80; i++)
{
id[i] = i;
size[i] = 1;
}
system("pause");
return 0;
}
求不同树的数量
int getSum()
{
int sum = 0;
for(int i = 0; i < 80; i++)
{
if(id[i] == i)
sum++;
}
cout << sum ;
}