关于反集的合并问题
查看原帖
关于反集的合并问题
297103
阴语飞楼主2022/8/1 19:29

以下是AC代码

#include<bits/stdc++.h>
using namespace std;
char opt;
int ans=0,n,m,x,y,fa[2020];//1~n friend n+1~2n enemy;
int	getfa(int x){
	if(x==fa[x]) return x;
	else return fa[x]=getfa(fa[x]); }
void merge(int x,int y) {fa[getfa(x)]=getfa(y);}
//bool check(int x,int y) {return getfa(x)==getfa(y) ? 0 : 1;}
int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n>>m;
	for(int i=1; i<=2*n ;i++)
	fa[i]=i;
	for(int i=1; i<=m ;i++){
		cin>>opt>>x>>y;
		if(opt=='F') merge(x,y);//&&check(y,x)
		else merge(y+n,x), merge(n+x,y); }
	for(int i=1;i <=n;i++)
	if(fa[i]==i) ans++;
	cout<<ans;}

但为何倒数第四行这样写(将1~n的数合并到n+1~2n上

	else merge(x,y+n), merge(y,n+x); }

就会只得10分 样例输出得2

然后就将询问答案的范围扩大到2n2*n

输出6 仍然不是正确答案

2022/8/1 19:29
加载中...