hiho刷題日記 第十三天最近公共祖先 一

2021-07-07 04:59:26 字數 1135 閱讀 9362

已知一棵族譜樹。查詢兩個人的最近公共祖先。

輸入每個測試點(輸入檔案)有且僅有一組測試資料。

每組測試資料的第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 五 提示對話方塊...