?
查看原帖
?
480934
xqqQwQ_楼主2021/10/16 16:41
#include<bits/stdc++.h>

using namespace std;

int fa[2001];
int n;

void init()
{
	for(int i=1;i<=2*n;i++)
	{
		fa[i]=i;
	}
	return;
}

int findn(int x)
{
	if(fa[x]==x) return x;
	else return fa[x]=findn(fa[x]);
}

void merge(int x,int y)
{
	int fx=findn(x),fy=findn(y);
	fa[fx]=fy;
	return;
}

int main()
{
	int m;
	cin>>n>>m;
	init();
	for(int i=1;i<=m;i++)
	{
		char op;int x,y;
		cin>>op>>x>>y;
		if(op=='F')
		{
			merge(x,y);
		}
		else if(op=='E')
		{
			merge(x+n,y);
			merge(y+n,x);//merge(x,y+n);
		}
	}
	int cnt=0;
	for(int i=1;i<=n;i++)
	{
		if(i==fa[i]) cnt++;
	}
	cout<<cnt<<endl;
	return 0;
}

注释里的这两种到底有啥区别,

一个40一个AC

2021/10/16 16:41
加载中...