60pts求帮
查看原帖
60pts求帮
1348953
never_give_u_up楼主2024/7/26 16:39
#include<bits/stdc++.h>

using namespace std;
int f[1001],enm[1001];
int n,m;
int find(int x){
	if(f[x]!=x) return find(f[x]);
	else return x;
}
void merge(int a,int b){
	int aa,bb;
	aa = find(a);
	bb = find(b);
	if(aa==bb)  return;
	f[bb] = aa;	
}
int find_e(int x){
	if(enm[x]!=x) return find_e(enm[x]);
	else return x;
}
void merge_e(int a,int b){
	int blc,alc,lc;
	blc = find_e(b);
	alc = find_e(a);
	for(int i = 1;i<=n;i++){
		lc = find_e(i);
		if(alc == lc){
			merge(a,i);
		}
		else if(blc == lc){
			merge(b,i);
		}
	}
}
int main(){
	cin>>n>>m;
	char opt;
	int a,b;
	for(int i = 1;i<=n;i++){
		f[i] = i;
		enm[i] = i;
	}
	for(int i = 1;i<=m;i++){
		cin>>opt>>a>>b;
		if(opt=='F') merge(a,b);
		else{
			merge_e(a,b);
		}
	}
	int ans =0;
	for(int i = 1;i<=n;i++){
		if(f[i]==i){
			ans++;
		}
	}
	cout<<ans;
}
2024/7/26 16:39
加载中...