時間限制:
10000ms
單點時限:
1000ms
記憶體限制:
256mb
描述小ho最近發現了乙個神奇的**!雖然還不夠像58同城那樣神奇,但這個**仍然讓小ho樂在其中,但這是為什麼呢?
「為什麼呢?」小hi如是問道,在他的觀察中小ho已經沉迷這個**一周之久了,甚至連他心愛的樹玩具都棄置一邊。
「嘿嘿,小hi,你快過來看!」小ho招呼道。
「你看,在這個對話方塊裡輸入我的名字,在另乙個對話方塊裡,輸入你的名字,再點這個查詢按鈕,就可以查出來……什麼!我們居然有同乙個祖祖祖祖祖爺爺?」
「誒,真是誒……這個**有點厲害啊。」小hi不由感嘆道。
「是啊,這是什麼演算法啊,這麼厲害!」小ho也附和道。
「別2,我說的是他能弄到這些資料很厲害,而人類的繁殖樹這種層數比較淺的樹對這類演算法的要求可是簡單的不得了,你都能寫出來呢!」小hi道。
「啊?我也能寫出來?可是……該從哪開始呢?」小ho困惑了。
小ho要面臨的問題是這樣的,假設現在他知道了n個人的資訊——他們的父親是誰,他需要對於小hi的每一次提問——兩個人的名字,告訴小hi這兩個人的是否存在同乙個祖先,如果存在,那麼他們的所有共同祖先中輩分最低的乙個是誰?
輸入每個測試點(輸入檔案)有且僅有一組測試資料。
每組測試資料的第1行為乙個整數n,意義如前文所述。
每組測試資料的第2~n+1行,每行分別描述一對父子關係,其中第i+1行為兩個由大小寫字母組成的字串father_i, son_i,分別表示父親的名字和兒子的名字。
每組測試資料的第n+2行為乙個整數m,表示小hi總共詢問的次數。
每組測試資料的第n+3~n+m+2行,每行分別描述乙個詢問,其中第n+i+2行為兩個由大小寫字母組成的字串name1_i, name2_i,分別表示小hi詢問中的兩個名字。
對於100%的資料,滿足n<=10^2,m<=10^2, 且資料中所有涉及的人物中不存在兩個名字相同的人(即姓名唯一的確定了乙個人)。
輸出對於每組測試資料,對於每個小hi的詢問,輸出一行,表示查詢的結果:如果根據已知資訊,可以判定詢問中的兩個人存在共同的祖先,則輸出他們的所有共同祖先中輩分最低的乙個人的名字,否則輸出-1。
樣例輸入
11jiayan jiadaihua
jiadaihua jiafu
jiadaihua jiajing
jiajing jiazhen
jiazhen jiarong
jiayuan jiadaishan
jiadaishan jiashe
jiadaishan jiazheng
jiashe jialian
jiazheng jiazhu
jiazheng jiabaoyu
3jiabaoyu jialian
jiabaoyu jiazheng
jiabaoyu lindaiyu
樣例輸出
jiadaishanjiazheng
-1
題目資料範圍比較弱,當做一棵樹數,路徑唯一,直接從下往上找就可以了。。。
#include #include #include #include #include #include #include #include #include #include #include #include #define ll __int64
#define eps 1e-8
using namespace std;
int n,i;
string a,b;
mapmp;
void find(string a,string b)
int flag;
while(1)
scanf("%d",&n);
while (n--)
return 0;
}
hiho 1062 最近公共祖先
題目大意 給出一棵家譜樹,樹中的節點都有乙個名字,保證每個名字都是唯一的,然後進行若干次查詢,找出兩個名字的最近公共祖先。分析 實現 include include include include include include includeusing namespace std unordere...
hiho 1062 最近公共祖先
題目大意 給出一棵家譜樹,樹中的節點都有乙個名字,保證每個名字都是唯一的,然後進行若干次查詢,找出兩個名字的最近公共祖先。分析 實現 include include include include include include includeusing namespace std unordere...
1062 最近公共祖先 一
時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述 小ho最近發現了乙個神奇的 雖然還不夠像58同城那樣神奇,但這個 仍然讓小ho樂在其中,但這是為什麼呢?為什麼呢?小hi如是問道,在他的觀察中小ho已經沉迷這個 一周之久了,甚至連他心愛的樹玩具都棄置一邊。嘿嘿,小hi,...