1.核心思想:建立一个具有连通性质的集合
2. 实现关键:路径压缩
3.初始化:自己的父亲是自己
4. 代码
#include<bits/stdc++.h>
using namespace std;
const int nu=500100;
struct node{
int u,v,w;
}e[nu];
int f[nu],p,m,dis,k=0;
int getf(int x)
{
if(x==f[x])return x;
else return f[x]=getf(f[x]);
}
int hebing(int z,int u,int v){
int t1=getf(u);
int t2=getf(v);
if(t1!=t2){
if(z==1) f[t2]=t1;
return 0;
}
return 1;
}
int main()
{
cin>>p>>m;
int z;
for(int i=1;i<=p;i++)f[i]=i;
for(int i=1;i<=m;i++)
{
cin>>z>>e[i].u>>e[i].v;
if(z==2)
{
if(hebing(z,e[i].u,e[i].v)) cout<<"Y"<<endl;
else cout<<"N"<<endl;
}
if(z==1) hebing(z,e[i].u,e[i].v);
}
return 0;
}