这个就是一个简单的并查集,如果是就合并.我们这里主要是用序号来代表人名,所以需要使用到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;
}