求大佬解答为什么反过来就错了
  • 板块学术版
  • 楼主kbzcz
  • 当前回复5
  • 已保存回复5
  • 发布时间2022/6/5 10:24
  • 上次更新2023/10/27 23:58:19
查看原帖
求大佬解答为什么反过来就错了
416192
kbzcz楼主2022/6/5 10:24

P1892 团伙

代码一(正确的):

#include<iostream>
using namespace std;
int parent[2005];
int find(int k) {
	if(k==parent[k])
		return k;
	return parent[k]=find(parent[k]);
}
void combine(int a,int b) {
	parent[find(a)]=find(b);
}
int main() {
	int n,m,ans=0;
	cin>>n>>m;
	for(int i=1;i<=2*n;i++) 
		parent[i]=i;
	for(int i=1;i<=m;i++) {
		char a;
		int x,y;
		cin>>a>>x>>y;
		if(a=='F') combine(x,y);
		else {
			combine(x+n,y);
			combine(y+n,x);//这一行
		}
	}
	for(int i=1;i<=n;i++)
		if(parent[i]==i)
			ans++;
	cout<<ans;
}

代码二(错的):

#include<iostream>
using namespace std;
int parent[2005];
int find(int k) {
	if(k==parent[k])
		return k;
	return parent[k]=find(parent[k]);
}
void combine(int a,int b) {
	parent[find(a)]=find(b);
}
int main() {
	int n,m,ans=0;
	cin>>n>>m;
	for(int i=1;i<=2*n;i++) 
		parent[i]=i;
	for(int i=1;i<=m;i++) {
		char a;
		int x,y;
		cin>>a>>x>>y;
		if(a=='F') combine(x,y);
		else {
			combine(x+n,y);
			combine(x,y+n);//这一行
		}
	}
	for(int i=1;i<=n;i++)
		if(parent[i]==i)
			ans++;
	cout<<ans;
}

求大佬解答为什么那两行反过来就错了

2022/6/5 10:24
加载中...