感觉注释的那个else里不严谨,但是过了,求帮忙看看代码到底严不严谨
查看原帖
感觉注释的那个else里不严谨,但是过了,求帮忙看看代码到底严不严谨
1475432
func2024楼主2025/7/26 10:31
#include <bits/stdc++.h>
using namespace std;
int n,m;
int fa[1100];
int d[1100];
int st[1100];
int find(int n){
	if(fa[n]==n)return n;
	return fa[n]=find(fa[n]);
}

void hb(int n,int m){
	n=find(n);
	m=find(m);
	if(m!=n){
		fa[m]=n;
	}
}
int main(){
	cin>>n>>m;
	
	
	for(int i=0;i<n;i++){
		fa[i]=i;
		d[i]=-1;
	}
	for(int i=0;i<m;i++){
		string s;
		int o,p;
		cin>>s>>o>>p;
        o--;
        p--;
		if(s=="F"){
			hb(o,p);
		}else{//感觉这个else里的不严谨,o,p有多个敌人会不会给之前的覆盖掉而出现问题
			if(d[o]==-1){
				d[o]=p;
			}else{
				hb(p,d[o]);
			}
			if(d[p]==-1){
				d[p]=o;
			}else{
				hb(o,d[p]);
			}
			
		}
	}
	for(int i=0;i<n;i++){
		st[find(i)]++;
	}
	int ans=0;
	for(int i=0;i<n;i++){
		if(st[i]>0)ans++;
	}
	cout<<ans;
    return 0;
}

2025/7/26 10:31
加载中...