社区讨论
求大佬解答为什么反过来就错了
学术版参与者 2已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @lo8ss9c1
- 此快照首次捕获于
- 2023/10/27 23:58 2 年前
- 此快照最后确认于
- 2023/10/27 23:58 2 年前
代码一(正确的):
CPP#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;
}
代码二(错的):
CPP#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;
}
求大佬解答为什么那两行反过来就错了
回复
共 5 条回复,欢迎继续交流。
正在加载回复...