有一个非常大的村子,叫做喵哈哈村,一开始他们都互相不认识,但是渐渐地,他们就会相互来往,所以就会有以下问题的产生:
1 x y,x家与y家成为朋友
2 x y,提问x家和y家是否为朋友,间接成为朋友也算。
本题包含若干组测试数据。
第一行两个整数n,m,表示这个村子有n户家庭,一开始他们都不认识。含有m个问题。
接下来m行:
1 x y
2 x y
分别表示操作和询问。
满足1<=n,m<=100000,注意x
是朋友输出Yes,否则输出N
No Yes Yes
题解
这道题就是并查集的题目,就是裸的并查集。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+6;
int n,m;
int fa[maxn];
int fi(int x){
return fa[x]==x?x:fa[x]=fi(fa[x]);
}
int uni(int x,int y){
x = fi(x),y = fi(y);
fa[x]=y;
}
void solve(){
for(int i=1;i<=n;i++)fa[i]=i;
for(int i=0;i<m;i++){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a==1){
uni(b,c);
}else{
if(fi(b)==fi(c)){
cout<<"Yes"<<endl;
}else{
cout<<"No"<<endl;
}
}
}
}
int main(){
while(cin>>n>>m)solve();
}