题目连接:http://hihocoder.com/problemset/problem/1062
解题思路:
最近公共祖先
用一个map映射 每个儿子映射父亲,
然后输入两个人的名字开始找最近的公共祖先
先找第一个人的祖先,每次标记一下,
然后找从第二个人开始找,如果找到被标记的,那就是他们最近的公共祖先,然后输出,
如果第二个人的祖先找完也没有找到,那就没有公共的祖先,输出-1
#include<iostream>
#include<map>
#include<stdio.h>
using namespace std;
int N,M;
map<string,string> pre;
void Find(string name1,string name2){
map<string,int> book;
book[name1]=1;
while(!pre[name1].empty()){
book[pre[name1]]=1;
name1=pre[name1];
}
while(!name2.empty())
{
if(book[name2])
{
cout<<name2<<endl;
return;
}
name2=pre[name2];
}
cout<<"-1"<<endl;
}
int main(){
scanf("%d",&N);
string Father,son,name1,name2;
for(int i=0;i<N;i++)
{
cin>>Father>>son;
pre[son]=Father;
}
scanf("%d",&M);
for(int i=0;i<M;i++){
cin>>name1>>name2;
Find(name1,name2);
}
return 0;
}