题意
- n个人,m次操作
- 每次操作要么在a,b之间建立亲戚关系,要么查询a,b之间是否为亲戚
思路
- 并查集典例,最开始每个结点的父亲是自己,建立,就合并两个,查询就查询
AC代码
#include<bits/stdc++.h>
using namespace std;
int fa[20202];
int find(int q){
return fa[q]==q?q:fa[q]=find(fa[q]);
}
void merge(int a,int b){
fa[find(a)]=find(b);
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int n,m,op;
string s,s1,s2;
cin >> n >> m ;
map<string,int>mp;
for(int i=1;i<=n;i++){
cin >> s ;
mp[s]=i;
fa[i]=i;
}
for(int i=0;i<m;i++){
cin >> op >> s1 >>s2 ;
if(op==1){
merge(mp[s1],mp[s2]);
}else{
if(find(mp[s1])==find(mp[s2])){
cout<<1<<'\n';
}else{
cout<<0<<'\n';
}
}
}
}