hihocoder#1062 : 最近公共祖先·一

xiaoxiao2021-02-28  98

hihocoder#1062 : 最近公共祖先·一

传送门

思路:用map存下每个节点及其父节点。每次询问时建立一个集合,将name1的所有祖先放入集合。

          自底向上的遍历name2的所有祖先,如果在集合中则为最近公共祖先。

#include<iostream> #include<algorithm> #include<queue> #include<cmath> #include<cstring> #include<cstdio> #include<map> #include<vector> #include<string> #include<set> using namespace std; #define INF 0x3f3f3f3f const int maxn = 1001; int main() { int n,m; string name1,name2; cin>>n; map<string,string>mp; while(n--) { cin>>name1>>name2; mp[name2]=name1; } cin>>m; while(m--) { set<string>s; cin>>name1>>name2; while(name1!="") { s.insert(name1); name1=mp[name1]; } bool flag=false; while(name2!="") { if(s.find(name2)!=s.end()) { flag=true; break; } else name2=mp[name2]; } if(!flag)cout<<-1<<endl; else cout<<name2<<endl; } return 0; }

转载请注明原文地址: https://www.6miu.com/read-39482.html

最新回复(0)