最近公共祖先·一 HihoCoder - 1062

题目连接: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;
} 

猜你喜欢

转载自blog.csdn.net/Harington/article/details/82689198