洛谷2814 nt資料題

2022-07-18 04:27:16 字數 911 閱讀 7198

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

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

1 #include 2 #include 3 #include 4 #include 5 #include 6

7using

namespace

std;89

const

int n = 50010

;10 unordered_mapp;

1112

string find(string

x)13

1718

intmain()

1933

else

if (n == '

+') p[name] =fa;

34else

3539

40while( getchar()!= '\n'

);41}42

43return0;

44 }

31行解釋:由於他已經給出了我們每乙個子節點的父親節點,那麼子節點就不需要進行初始化,只需要對給出的父親節點初始化一下就好。而又因為前面給出的子節點可能為後面的父節點,所以我們需要對第一次出現的父節點初始化一下,而不需要對每乙個父節點初始化,如果對每乙個父節點均進行初始化,那麼父節點的父節點則會被覆蓋掉。

我們在並查集的初始化中是由於每乙個節點都是有可能為父節點,所以要對每乙個節點都初始化。

洛谷P2814 家譜

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

洛谷P2814 家譜

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

洛谷P2814 家譜

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