P3367 【模板】并查集
#include<iostream>
#include<algorithm>
using namespace std;
const int maxm=10010;
int pre[maxm];
int n,m;
void make()//初始化
{
for (int i=1;i<=n;i++)
{
pre[i]=i;
}
}
int find(int x)//查询,并进行路径压缩
{
int r=x;
while (pre[r]!=r)
{
r=pre[r];
}
int i=x,j;
while (i!=r)
{
j=pre[i];
pre[i]=r;
i=j;
}
return r;
}
void Union(int x,int y)//合并
{
int fx=find(x);
int fy=find(y);
if (fx==fy)
return ;
else
{
pre[fx]=fy;
}
}
int main()
{
cin>>n>>m;
make();
for (int i=1;i<=m;i++)
{
int r,x,y;
cin>>r>>x>>y;
if (r==1)
{
Union(x,y);
}
else if(r==2)
{
if (find(x)==find(y))
{
cout<<"Y"<<endl;
}
else
{
cout<<"N"<<endl;
}
}
}
}
/*
输入
4 7
2 1 2
1 1 2
2 1 2
1 3 4
2 1 4
1 2 3
2 1 4
输出
N
Y
N
Y
*/