AcWing 837. 连通块中点的数量 并查集模板题
Posted karshey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing 837. 连通块中点的数量 并查集模板题相关的知识,希望对你有一定的参考价值。
注意根节点不一样才合并,否则size会重复相加。
注意size要加在根节点上。
#include<bits/stdc++.h>
using namespace std;
#define fir(i,a,n) for(int i=a;i<=n;i++)
//======================
const int N=1e5+10;
int n,m;
int fa[N],cnt[N];//cnt要在根节点
int find(int x)
{
if(fa[x]!=x) fa[x]=find(fa[x]);
return fa[x];
}
void merge(int x,int y)
{
int t1=find(x),t2=find(y);
fa[t1]=t2;
cnt[t2]+=cnt[t1];
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=1e5;i++) fa[i]=i,cnt[i]=1;
while(m--)
{
string c;int a,b;
cin>>c>>a;
if(c=="C")
{
cin>>b;
int t1=find(a),t2=find(b);
if(t1!=t2) merge(t1,t2);//不一样才合并,不然cnt就重复相加了
}
else if(c=="Q1")
{
cin>>b;
int t1=find(a),t2=find(b);
if(t1==t2) cout<<"Yes";
else cout<<"No";
cout<<endl;
}
else
{
int t=find(a);
cout<<cnt[t]<<endl;
}
}
return 0;
}
以上是关于AcWing 837. 连通块中点的数量 并查集模板题的主要内容,如果未能解决你的问题,请参考以下文章