81求调
查看原帖
81求调
752628
l56983楼主2025/1/26 12:38
#include <bits/stdc++.h>
using namespace std;
int n,m;
char a;
int en[5000][5000];
int fa[200005];
int zz[200005];
int root(int x)
{
	if(x==fa[x]) return x;
	return fa[x]=root(fa[x]);
}
void merge(int x,int y)
{
	int fx=root(x);
	int fy=root(y);
	if(fx==fy) return;
	fa[fx]=fy;
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++) 
	{
		fa[i]=i;
	}
	int x,y;
	for(int i=1;i<=m;i++)
	{
		cin>>a>>x>>y;
		if(a=='E')
		{
			en[x][y]=1;	
		}
		else if(a=='F')
		{
			merge(x,y);
		}		
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			for(int k=1;k<=n;k++)
			{
				if(en[i][j]&&en[i][k])
				{
					merge(j,k);
				}
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		int fi=root(i);
		zz[fi]=1;
	}
	int ans=0;
	for(int i=1;i<=n;i++) ans+=zz[i];
	cout<<ans;
	return 0;
}
2025/1/26 12:38
加载中...