社区讨论
有三个测试点运行时出错,求解答
P3367【模板】并查集参与者 4已保存回复 19
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 19 条
- 当前快照
- 1 份
- 快照标识符
- @mi6hq47q
- 此快照首次捕获于
- 2025/11/20 05:04 4 个月前
- 此快照最后确认于
- 2025/11/20 05:09 4 个月前
CPP
#include<iostream>
using namespace std;
int x,y,z,father[10001],n,m;
int find(int t) //找祖宗
{
if(father[t]!=t) return find(father[t]); //如果其父亲不是祖宗,就找父亲的父亲,依次递归
else return t; //如果找到了祖宗,就返回祖宗的值
}
void unionn(int r1,int r2)
{
father[r2]=r1; //r2的父亲是r2,即集合r1.r2下的所有元素有一个共有祖宗,r1
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++) father[i]=i;
for(int i=1;i<=m;i++)
{
int r1,r2;
cin>>z>>x>>y;
if(z==1)
{
r1=find(x); //r1表示x的祖宗
r2=find(y); //r2表示y的祖宗
if(r1!=r2) unionn(r1,r2);
} //如果r1不等于r2,就将他们两个集合联立为一个集合
else
if(find(x)==find(y)) cout<<"Y"; //find【x】表示x的祖宗
else cout<<"N";
}
return 0;
}
回复
共 19 条回复,欢迎继续交流。
正在加载回复...