这个就是一个简单的并查集,如果是就合并.我们这里主要是用序号来代表人名,所以需要使用到map
#include<iostream>
#include<map>
using namespace std;
const int N=2e4+10;
map<string,int> mp;
int fa[N];
int find(int x)
{
return fa[x]==x?x:find(fa[x]);
}
void merge(int x,int y)
{
fa[find(x)]=find(y);
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
string s;
cin>>s;
mp[s]=i;
fa[i]=i;
}
while(m--)
{
int op;
string a,b;
cin>>op>>a>>b;
int x=mp[a],y=mp[b];
if(op==1)
{
merge(x,y);
}
else
{
if(find(x)==find(y))
cout<<1<<endl;
else cout<<0<<endl;
}
}
return 0;
}