求助样例过了交上去只有10分,求大佬指点
查看原帖
求助样例过了交上去只有10分,求大佬指点
585534
SHenP楼主2022/2/15 04:47

不知为何本蒟蒻的代码WA了9个点,求dalao指点

#include<cstdio>
#include<vector>
#include<map>
#define MAXN 1005
using namespace std;
int father[MAXN];
vector<int>e[MAXN];
map<int,bool>flag;
int find(int x) {
	int s1=x,s2;
	while(father[s1]!=s1)s1=father[s1];
	while(x!=s1) {
		s2=father[x];
		father[x]=s1;
		x=s2;
	}
	return x;
}
int main() {
	int n,m;
	scanf("%d\n%d\n",&n,&m);
	for(int i=1; i<=n; i++)father[i]=i;
	for(int i=0; i<m; i++) {
		int p,q;
		if(getchar()=='F') {
			scanf(" %d %d",&p,&q);
			father[find(p)]=find(q);
		} else {
			scanf(" %d %d",&p,&q);
			e[p].push_back(q);
			e[q].push_back(p);
		}
		getchar();
	}
	for(int i=1; i<=n; i++) {
		if(!e[i].empty()) {
			int f=find(e[i].back());
			e[i].pop_back();
			while(!e[i].empty()) {
				father[find(e[i].back())]=f;
				e[i].pop_back();
			}
		}
	}
	for(int i=1; i<=n; i++)flag[find(i)]=true;
	printf("%d",flag.size());
	return 0;
}
2022/2/15 04:47
加载中...