40分求指点
查看原帖
40分求指点
1088913
xiaohaowen楼主2024/8/7 09:34

剩下全WA了

#include <bits/stdc++.h>
using namespace std;
int fa[1001],diren[1001];
int find(int x){
	int r=x;
	while(fa[r]!=r){
		r=fa[r];
	}
	while(x!=r){
		int t=x;
		x=fa[x];
		fa[t]=r;
	}
	return r;
}

void join(int a,int b){
	if(a!=b){
		fa[b]=a;
	}
}

int main(){
	int n,m;
	cin>>n>>m;
	int cnt=n;
	for(int i=1;i<=n;i++){
		fa[i]=i;
	}for(int i=1;i<=m;i++){
		char op;
		int x,y;
		cin>>op>>x>>y;
		int fx=find(x);
		int fy=find(y);
		if(op=='E'){
			if(diren[fx]==0){
				diren[fx]=fy;
			}else{
				cnt--;
				join(find(diren[x]),fy);
			}
			if(diren[fy]==0){
				diren[fy]=fx;
			}else{
				cnt--;
				join(find(diren[y]),fx);
			}
		}else if(op=='F'){
			cnt--;
			join(fx,fy);
		}
	}
	//cout<<cnt;
	cnt=0;
	for(int i=1;i<=n;i++){
		if(fa[i]==i){
			cnt++;
		}
	}cout<<cnt;
	return 0;
}

2024/8/7 09:34
加载中...