已知一棵族譜樹。查詢兩個人的最近公共祖先。
輸入每個測試點(輸入檔案)有且僅有一組測試資料。
每組測試資料的第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。
首先建立一棵族譜樹。對於輸入的父子關係做記錄:father[son_name]=father_name;
然後開始找最近公共祖先。對於查詢兩個人(name1,name2)用一下方式查詢:
1.將name1及其所有的祖先做標記mark。
2.查詢name2的祖先,找到的第乙個被做了標記的祖先便是他們最近的公共祖先。若找到底都沒找到,則name1和name2沒有公共祖先。
#include
#include
#include
#include
#include
using
namespace
std;
int n;
map fa;
map mask;
int main()
scanf("%d",&n);
while(n--)
cin>>fn>>sn;
while(fa.count(fn))
mask[fn]=1;
while(fa.count(sn) && !mask[sn])
if(mask[sn]) cout
cout
<<-1
0;}
第十三天 練兵
問 昨天您講的很驚心動魄。這樣快節奏的配合確實非常完美,很羨慕。但要形成這樣的結果必須我們之間配合需要非常流暢,我們有什麼方法可以促成這樣的氛圍?答 練兵。如果一開始就進入業務系統功能的設計開發,業務組長對業務還沒有很深的吃透,這樣倉促上陣功能不但連上一版不如,而且為了補課,軟體不斷修改,什麼都亂了...
2020 7 18第十三天
1.學習了static關鍵字 靜態變數,靜態方法以及靜態模組 1 public class vardemo 9 1 public class staticblockdemo 5public staticblockdemo 8public static void main string args 12...
android基礎 第十三天
可航訓練營 為幫助大家更好的 系統性的學習 android 一 progressbar頁面進度提示 密碼 9ewc 二 fragment優化選項卡切換 密碼 gvsb 三 fragment和activity進行通訊 密碼 45u2 四 xlistview上拉重新整理 密碼 na6r 五 提示對話方塊...