洛谷 P2814 家譜 gen

2022-04-02 17:22:47 字數 1139 閱讀 8938

現代的人對於本家族血統越來越感興趣。

給出充足的父子關係,請你編寫程式找到某個人的最早的祖先。

輸入格式:

輸入由多行組成,首先是一系列有關父子關係的描述,其中每一組父子關係中父親只有一行,兒子可能有若干行,用#name的形式描寫一組父子關係中的父親的名字,用+name的形式描寫一組父子關係中的兒子的名字;接下來用?name的形式表示要求該人的最早的祖先;最後用單獨的乙個$表示檔案結束。

輸出格式:

按照輸入檔案的要求順序,求出每乙個要找祖先的人的祖先,格式:本人的名字+乙個空格+祖先的名字+回車。

輸入樣例:

#george

+rodney

#arthur

+gareth

+walter

#gareth

+edward

?edward

?walter

?rodney

?arthur

$

輸出樣例#1:

edward arthur

walter arthur

rodney george

arthur arthur

規定每個人的名字都有且只有6個字元,而且首字母大寫,且沒有任意兩個人的名字相同。最多可能有1000組父子關係,總人數最多可能達到50000人,家譜中的記載不超過30代。

見**

1 #include2 #include3 #include4

using

namespace

std;

5 mapmapn;

6string

s,s1;

7char

ch;8

intnum;

9string find(string

x)10

14int

main()

1525

else

if(ch=='+'

)//讀入兒子姓名

26 mapn[s]=s1;//mapn[兒子]=父親

27else

28 cout<'

'29 cin>>ch;30}

31return0;

32 }

洛谷P2814 家譜

查詢祖先的題目,自然是要用到並查集了,不過在輸入,資料的處理上要注意細節,名字的前面 等字元顯然是分類的,可以先輸入乙個字元,然後判斷後分別處理。還有map關聯兩個字串就可以了,不用再進行編號 字元的轉換,並查集時一定要注意祖先的初始化。include include include include...

洛谷P2814 家譜

現代的人對於本家族血統越來越感興趣。給出充足的父子關係,請你編寫程式找到某個人的最早的祖先。輸入格式 輸入由多行組成,首先是一系列有關父子關係的描述,其中每一組父子關係中父親只有一行,兒子可能有若干行,用 name的形式描寫一組父子關係中的父親的名字,用 name的形式描寫一組父子關係中的兒子的名字...

洛谷P2814 家譜

洛谷 p2814 家譜 水的典型的並查集題目,但在建立關係時需要有一定的思考,因為名字都是字串,所以這裡採用了map以建立名字和名字之間的關係 include include include include include using namespace std map persons string...