0pts求调
查看原帖
0pts求调
1407837
zhouyunxiang0807楼主2025/6/18 18:08
#include<bits/stdc++.h>
using namespace std;

int n,m;
int f[10005];
int find(int );
void unity(int ,int );
int main() {
	scanf("%d%d",&n,&m);
	for(int i=1; i<=n*2; i++) {
		f[i]=i;
	}
	for(int i=1; i<=m; i++) {
        char c;
        int x,y;
		cin>>c>>x>>y;
		if(c=='F') {
			unity(x,y);
		}
		if(c=='E') {
			unity(x+n,y);
			unity(x,y+n);
		}
	}
	int ans=0;
	for(int i=1; i<=n; i++) {
		//cout<<f[i]<<" ";
		if(f[i]==i) {
			ans++;
		}
	}
	printf("%d",ans);
	return 0;
}
int find(int x) {
	if(f[x]==x)return x;
	else return f[x]=find(f[x]);
}
void unity(int x,int y) {
	f[find(x)]=find(y);
}

我感觉我的方法是对的,但是WA了。不知道哪里出错了,有没有大佬指点一下。

2025/6/18 18:08
加载中...