1. 程式人生 > >hihoCoder_#1062_最近公共祖先·一

hihoCoder_#1062_最近公共祖先·一

描述

小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。