主要的思想就是运用并查集来查询两个人之间的距离来进行输出
`#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
int parent[26];
int getDis(int x,int y){
int distance=0;
while(x!=y && x!=parent[x]){
distance++;
x = parent[x];
}
if(x!=y){
return 0;
}else{
return distance;
}
}
int main(){
int n,m;
while(cin>>n>>m){
for(int i=0;i<26;i++){
parent[i]=i;
}
while(n--){
string str;
cin>>str;
int child = str[0]-'A';
if(str[1] != '-'){
parent[str[1]-'A'] = child;
}
if(str[2] != '-'){
parent[str[2]-'A']= child;
}
}
while(m--){
string str;
cin>>str;
int pp1=str[0]-'A';
int pp2=str[1]-'A';
int dist=getDis(pp1,pp2);
if(dist!=0){
if(dist==1){
cout<<"parent"<<endl;
}else if(dist==2){
cout<<"grandparent"<<endl;
}else{
for(int k=2;k<dist;k++){
cout<<"great-";
}
cout<<"grandparent"<<endl;
}
}else{
dist=getDis(pp2,pp1);
if(dist==0){
cout<<"-"<<endl;
}else if(dist==1){
cout<<"child"<<endl;
}else if(dist==2){
cout<<"grandchild"<<endl;
}else{
for(int k=2;k<dist;k++){
cout<<"great-";
}
cout<<"grandchild"<<endl;
}
}
}
}
}
`