#include<cstdio>
#define MAX 1000
struct UnionFind
{
int fa[MAX];
void make_set()//初始化
{
for (int i = 0; i < MAX; i++)fa[i] = i;
}
int find_set(int x)//查
{
return x == fa[x] ? x : fa[x] = find_set(fa[x]);
}
void union_set(int a, int b)//合并
{
int x = find_set(a);
int y = find_set(b);
if (x != y)
{
fa[y] = x;
}
}
};
int main()
{
}
[map版]
#include<cstdio>
#include<map>
using namespace std;
struct UnionFind
{
map<int,int>mp;
UnionFind()
{
mp.clear();
}
int find_set(int x)//查
{
return x == mp[x] ? x : mp[x] = find_set(mp[x]);
}
void union_set(int a, int b)//合并
{
int x = find_set(a);
int y = find_set(b);
if (x != y)
{
mp[y] = x;
}
}
};
[可计数]
struct UnionFind
{
int fa[MAX];
int num[MAX];
UnionFind()
{
make_set();
}
void make_set()//初始化
{
for (int i = 0; i < MAX; i++)
{
fa[i] = i;
num[i] = 1;
}
}
int find_set(int x)//查
{
return x == fa[x] ? x : fa[x] = find_set(fa[x]);
}
void union_set(int a, int b)//合并
{
int x = find_set(a);
int y = find_set(b);
if (x != y)
{
fa[y] = x;
num[x] += num[y];
}
}
};