
#include<bits/stdc++.h> |
using namespace std; |
int main() |
{ |
int n, m, i, cn = 0; |
cin>>n>>m; |
getchar(); |
map<string, string> mf; |
vector<string> last(110); //预先分配好110的大小 |
string name, a, b, c, d;; |
for(i = 0; i < n; i++) |
{ |
getline(cin, name); |
cn = count(name.begin(), name.end(), ' '); //计算空格的数量 |
name = name.substr(cn); |
if(cn) |
{ |
mf[name] = last[cn / 2 - 1]; //记录上一个父节点 |
last[cn / 2] = name; |
} |
else |
{ |
mf[name] = "root"; |
last[0] = name; |
} |
} |
for(i = 0; i < m; i++) |
{ |
cin >> a >> d >> d >> b >> d >> c; |
if(b[0] == 'c') |
{ |
if(mf[a] == c) |
cout<<"True"<<endl; |
else |
cout<<"False"<<endl; |
} |
else if(b[0] == 'p') |
{ |
if(mf[c] == a) |
cout<<"True"<<endl; |
else |
cout<<"False"<<endl; |
} |
else if(b[0] == 's') |
{ |
if(mf[c] == mf[a]) |
printf("True\n"); |
else |
cout<<"False"<<endl; |
} |
else if(b[0] == 'a') |
{ |
while(mf[c] != a && mf[c] != "root") c = mf[c]; |
if(mf[c] == "root") |
cout<<"False"<<endl; |
else |
cout<<"True"<<endl; |
} |
else if(b[0] == 'd') |
{ |
while(mf[a] != c && mf[a] != "root") a = mf[a]; |
if(mf[a] == "root") |
cout<<"False"<<endl; |
else |
cout<<"True"<<endl; |
} |
} |
return 0; |
} |




by: 发表于:2017-12-13 10:32:49 顶(0) | 踩(0) 回复
??
回复评论