用空格数/2来标记是哪一代的人,father是上一个上一代,用last数组来记录
#include<iostream>
#include<string>
#include<algorithm> //count函数
#include<map>
using namespace std;
const int N=110;
string last[N];
int n,m;
map<string,string>father;
void pre()
{
cin>>n>>m;
cin.get(); //又双叒叕死在这里
for(int i=1;i<=n;++i)
{
string s;
getline(cin,s);
int cnt=count(s.begin(),s.end(),' ');
if(!cnt)
{
father[s]="root";
last[0]=s; //last记录上一个属于该阶层的人
}
else
{
s=s.substr(cnt);
father[s]=last[cnt/2-1];
last[cnt/2]=s;
}
}
}
int main()
{
pre();
while(m--)
{
string a,b,c,d;
cin>>a>>b>>b>>c>>b>>d;
const char *T="True",*F="False";
switch(c[0])
{
case 'p':
swap(a,d);
case 'c':
cout<<(father[a]==d?T:F)<<endl;
break;
case 's':
cout<<(father[a]==father[d]?T:F)<<endl;
break;
case 'a':
swap(a,d);
case 'd':
while(father[a]!=d&&father[a]!="root") a=father[a];
cout<<(father[a]==d?T:F)<<endl;
}
}
return 0;
}