20分求助
查看原帖
20分求助
1123515
alwfone楼主2024/5/18 22:13

代码如下:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll n,m,fa[1001],tf[1001],ans,dr[1001];
ll find(ll a)
{
	if (fa[a]==a)
		return a;
	else
		return fa[a]=find(fa[a]);
}
int main(){
	scanf("%lld%lld",&n,&m);
	for (ll i=1;i<=n;i++)
		fa[i]=i;
	for (ll i=1;i<=m;i++)
	{
		ll x,y;
		char p;
		cin>>p>>x>>y;
		if (p=='E')
		{
			if (dr[x]==0)
				dr[x]=find(y);
			else
				fa[find(x)]=fa[find(dr[x])];
			if (dr[y]==0)
				dr[y]=find(x);
			else
				fa[find(y)]=fa[find(dr[y])];
		}
		else
			fa[find(x)]=fa[find(y)];
	}
	for (ll i=1;i<=n;i++)
	{
		ll l=find(i);
		if (tf[l]==0)
		{
			tf[l]++;
			ans++;
		}
	}
	printf("%lld",ans);
	return 0;
	}

tf[i]:i是否标记了
fa[i]:i的父亲
dr[i]:i的敌人
帮帮我吧qwq

2024/5/18 22:13
加载中...