社区讨论

有三个测试点运行时出错,求解答

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 条回复,欢迎继续交流。

正在加载回复...