現代的人對於本家族血統愈來愈感興趣。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 }
變量定義的位置得仔細考慮一下;