求助,过不了样例
查看原帖
求助,过不了样例
356081
Night_7d5楼主2021/5/23 22:00
#include<bits/stdc++.h>
using namespace std;
int fri[1001],ene[1001];
int Count[1001];
int find_fri(int k) {
	if(k!=fri[k]) {
		fri[k]=find_fri(fri[k]);
	}
	return fri[k];
}
int find_ene(int k) {
	if(k!=ene[k]) {
		ene[k]=find_ene(ene[k]);
	}
	return ene[k];
}
int Onion_fri(int a,int b) {
	fri[find_fri(a)]=find_fri(b);
}
int Onion_ene(int a,int b) {
	ene[find_ene(a)]=find_ene(b);
}
int main() {
	int n,m,p,q,ans=0;
	char opt;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++) {
		fri[i]=i;
		ene[i]=i;
	}
	for(int i=1;i<=m;i++) {
		cin>>opt>>p>>q;
		if(opt=='E') {
		Onion_ene(p,q);
			for(int j=1;j<=n;j++) {
				if(find_ene(j)==find_ene(p)&&j!=p&&j!=q) {
					Onion_fri(j,q);
				}
				if(find_ene(j)==find_ene(q)&&j!=q&&j!=p) {
					Onion_fri(j,p);
				}
			}
		}
		if(opt=='F') {
		Onion_fri(p,q);
			for(int j=1;j<=n;j++) {
				if(find_fri(j)==find_fri(p)&&j!=p&&j!=q) {
					Onion_fri(j,q);
				}
				if(find_fri(j)==find_fri(q)&&j!=q&&j!=p) {
					Onion_fri(j,p);
				}
			}
		}
	}
	for(int i=1;i<=n;i++) {
		Count[find_fri(i)]++;
	}
	for(int i=1;i<=n;i++) {
		if(!Count[i]) {
			ans++;
		}
	}
	printf("%d",ans);
	return 0;
}

输入: 6 4 E 1 4 F 3 5 F 4 6 E 1 2 输出: 4 经过验证,结点2在程序执行时指向了1

2021/5/23 22:00
加载中...