#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 100010;
int n,m;
int fa[N],cnt[N];
void init()
{
for(int i=1;i<=n;i++)
{
fa[i]=i;
cnt[i]=1;
}
return;
}
int Find(int x)
{
if(fa[x]!=x) fa[x] = Find(fa[x]);
return fa[x];
}
void Union(int x,int y)
{
int a = Find(x);
int b = Find(y);
if(a!=b)
{
fa[b]=a;
cnt[a]+=cnt[b];
}
return;
}
int main(void)
{
cin >> n >> m;
init();
while (m -- )
{
string op;
cin >> op;
int a,b;
if(op=="C")
{
cin >> a >> b;
Union(a,b);
}
else if(op=="Q1")
{
cin >> a >>b;
if(Find(a)==Find(b)) puts("Yes");
else puts("No");
}
else if(op=="Q2")
{
cin >> a;
int ans = cnt[Find(a)];
cout << ans << endl;
}
}
return 0;
}
联通块中点的数量——并查集
最新推荐文章于 2024-08-05 11:36:30 发布
这篇文章介绍了如何使用C++实现并查集数据结构,包括初始化、合并两个集合(Union)以及查询两个元素是否在同一个集合(Q1)中的函数Find。展示了如何处理集合操作的基本问题。
摘要由CSDN通过智能技术生成