链接:https://ac.nowcoder.com/acm/contest/904/B
来源:牛客网
题目描述
DongDong每年过春节都要回到老家探亲,然而DongDong记性并不好,没法想起谁是谁的亲戚(定义:若A和B是亲戚,B和C是亲戚,那么A和C也是亲戚),她只好求助于会编程的你了。
输入描述:
第一行给定n,m表示有n个人,m次操作第二行给出n个字符串,表示n个人的名字分别是什么(如果出现多个人名字相同,则视为同一个人)(保证姓名是小写字符串)接下来m行,每行输入一个数opt,两个字符串x,y当opt=1时,表示x,y是亲戚当opt=2时,表示询问x,y是否是亲戚,若是输出1,不是输出0数据范围:1<=n,m<=20000,名字字符长度小等于10
输出描述:
对于每个2操作给予回答
示例1
输入
复制
4 4 chen lin yi cheng 2 chen lin 1 chen lin 1 yi lin 2 yi lin
输出
复制
0 1
算是半个水题吧
#include<bits/stdc++.h>
using namespace std;
int n,m,a[20005];
map<string,int> M;
string s,s1;
int find(int x)
{if(a[x]==x) return x;return a[x]=find(a[x]);
}
void add(int x,int y)
{if(find(x)!=find(y))a[find(x)]=find(y);
}
int main()
{cin>>n>>m;for(int i=0; i<n; i++){cin>>s;M[s]=a[i]=i;}while(m--){int x;cin>>x>>s>>s1;if(x==1)add(M[s],M[s1]);else{if(find(M[s])!=find(M[s1]))cout<<'0'<<endl;elsecout<<'1'<<endl;}}return 0;
}