现在有一个并查集,你需要完成合并和查询操作。
输入格式:
第一行包含两个整数 N,M ,表示共有 N 个元素和 M 个操作。
接下来 M 行,每行包含三个整数 zi,xi,yi 。
当 zi=1 时,将 xi与yi所在的集合合并。
当 zi=2 时,输出xi与yi 是否在同一集合内,是的输出 Y ;否则输出 N.
输出格式:
对于每一个 zi=2的操作,都有一行输出,每行包含一个大写字母,为 Y 或者 N 。
输入样例:
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
#include <bits/stdc++.h>
using namespace std;
int a[10086];
int root(int x)
{
if(a[x]==x)
{
return x;
}
else
{
a[x]=root(a[x]);
return a[x];
}
}//查根
void bine(int x,int y)
{
x=root(x);
y=root(y);
if(x!=y)
{
a[x]=y;
}
}//合并,可优化
int main()
{
int n,m,i;
cin>>n>>m;
for(i=1;i<=n;i++)
{
a[i]=i;
}
for(i=1;i<=m;i++)
{
int op,x,y;
cin>>op>>x>>y;
if(op==1)
{
bine(x,y);
}
else
{
if(root(x)==root(y))
{
cout<<"Y"<<endl;
}
else
{
cout<<"N"<<endl;
}
}
}
return 0;
}