题目链接:http://hihocoder.com/problemset/problem/1066
#include <iostream>
#include <algorithm>
#include <math.h>
#include <map>
#define NUM 200005
using namespace std;
int father[NUM];
int n;
map<string,int> m;
void init()
{
for(int i=1;i<=NUM;i++)
{
father[i]=i;
}
}
int find_father(int x)
{
if(x==father[x])
return x;
else
{
father[x]=find_father(father[x]);
return father[x];
};
}
int union_set(int a,int b)
{
int fa,fb;
fa=find_father(a);
fb=find_father(b);
if(fa!=fb)
father[fb]=fa;
}
bool check(int a,int b)
{
if(find_father(father[a])==find_father(father[b]))
return true;
else
return false;
}
int main()
{
cin>>n;
int id=1;
init();
for(int i=0;i<n;i++)
{
int opt;
string name1,name2;
cin>>opt>>name1>>name2;
if(!m[name1]) m[name1]=id++;
if(!m[name2]) m[name2]=id++;
if(opt==0)
{
union_set(m[name1],m[name2]);
}
else
{
if(check(m[name1],m[name2])==true)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
}
return 0;
}