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. 连通块中点的数量 并查集模板题的主要内容,如果未能解决你的问题,请参考以下文章

AcWing 837. 连通块中点的数量 并查集模板题

AcWing 837. 连通块中点的数量

837. 连通块中点的数量(并查集)

837. 连通块中点的数量

[USACO18OPEN] Multiplayer Moo (并查集+维护并查集技巧)

ACwing(基础)--- Kruskal