现代的人对于本家族血统愈来愈感兴趣。ios
给出充足的父子关系,请你编写程序找到某我的的最先的祖先。ide
输入格式:spa
输入由多行组成,首先是一系列有关父子关系的描述,其中每一组父子关系中父亲只有一行,儿子可能有若干行,用#name的形式描写一组父子关系中的父亲的名字,用+name的形式描写一组父子关系中的儿子的名字;接下来用?name的形式表示要求该人的最先的祖先;最后用单独的一个$表示文件结束。3d
输出格式:code
按照输入文件的要求顺序,求出每个要找祖先的人的祖先,格式:本人的名字+一个空格+祖先的名字+回车。blog
输入样例#1:ci
#George
+Rodney
#Arthur
+Gareth
+Walter
#Gareth
+Edward
?Edward
?Walter
?Rodney
?Arthur
$get
输出样例#1:string
Edward Arthur
Walter Arthur
Rodney George
Arthur Arthurio
map + 并查集;
1 #include<map> 2 #include<iostream> 3 using namespace std; 4 map<string, string> father; 5 string getf(string x){ 6 if(x == father[x]) return x; 7 else return father[x] = getf(father[x]); 8 } 9 int main(){ 10 string fath; 11 while(1){ 12 string son, temp; 13 char c; 14 cin >> c; 15 if(c == '$') break; 16 else if(c == '#'){ 17 cin >> fath; 18 if(father[fath] == "") father[fath] = fath; 19 } 20 else if(c == '+'){ 21 cin >> son; 22 father[son] = fath; 23 } 24 else if(c == '?'){ 25 cin >> temp; 26 cout << temp << " " << getf(temp) << endl; 27 } 28 } 29 return 0; 30 }
变量定义的位置得仔细考虑一下;