这是什么破题,我这哪里出错了,我给你们看看这破题神奇的操作
查看原帖
这是什么破题,我这哪里出错了,我给你们看看这破题神奇的操作
381600
K_srh楼主2022/7/27 15:12
#include<cstdio>
using namespace std;
const int N=5005;
int f[N],ans[N]; 
int find(int x)
{
	if(f[x]==x)return x;
	else return f[x]=find(f[x]);
}
void Merge(int x,int y)
{
	int t1=find(x);
	int t2=find(y);
	if(t1!=t2)f[t1]=t2;
}
int main()
{
	int n,m;//,x,y;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n*2;i++)f[i]=i;
	while(m--)
	{
		char opt[2];
		scanf("%s",opt+1);
		if(opt[1]=='F')
		{
		   int x,y;
		   scanf("%d%d",&x,&y); 
			Merge(x,y);
		}
		if(opt[1]=='E')
		{
		   int x,y;
		   scanf("%d%d",&x,&y); 
			Merge(x+n,y);
			Merge(y+n,x);
		}
	}
	int sum=0;
	for(int i=1;i<=n;i++)
	{
		int y=find(i);
		if(ans[y]==0)
		{
			ans[y]=1;
			sum++;
		}
	}
	printf("%d",sum);
	return 0;
}

错的数据,本地跑数据输出一样

2022/7/27 15:12
加载中...