冰島是作為乙個人口稀少的國家,人群之間具有複雜的血緣關係,為了避免不必要的意外,他們的手機上都安裝了一款可以隨時查詢兩個人之間是否有血緣關係的軟體。現在你的任務就是實現這樣乙個功能,接收血緣關係的登記資訊,並在我們查詢時給出兩個人是否具有血緣關係。
血緣關係具有自反性、傳遞性。
一行整數n,以下n行,每行3個正整數q、a、b
若q為1,則登記a與b具有血緣關係
若q為2,則查詢a與b的血緣關係,若有,輸出一行yes;若無,輸出一行no。
對於每個q=2,輸出一行yes或no。
51 1 2
1 3 4
2 1 3
1 2 3
2 1 4
noyes
對於20%的資料,n<=1000
對於100%的資料,n<=1e7,1<=a,b<=n
這題主要是運用並查集來求解,但需要注意的是不能用cin,cout來輸入輸出,在第三個點會超時。
#include
#include
#include
#include
#include
using
namespace std;
const
int maxn=
1e7+10;
int vis[maxn]
;int
find
(int x)
else
}void
merge
(int a,
int b)
else
}int
main()
while
(n--
)else
if(x==2)
else}}
return0;
}
PTA 家譜處理
這題一開始以為是大模擬,但是看了別人以後的題解發現,有更好的解法。我們可以觀察出,這個輸入順序決定了每個人的num 2個空格一定是他的父親,所以直接記錄就行,lca暴力跳就可以了,不用倍增。include include include include include include include...
PTA 家譜處理 資料結構
比賽的時候愣是用map string,int 的值代表了這個人所處家譜中的層次 後來借鑑了小明學長的思路,給每個人編id號,用值表示每個對應的id 用fa maxn 存的是每個人的父親id,fa id 父親的id 有乙個小問題,ac之後想關閉io同步提一波速,沒料到pta很玄學地直接給我返了wa?本...
冰島人 不會寫
2018年世界盃,冰島隊因1 1平了強大的阿根廷隊而一戰成名。好事者發現冰島人的名字後面似乎都有個 松 son 於是有科普如下 輸入首先在第一行給出乙個正整數 n 1隨後一行給出正整數 m,為查詢數量。隨後 m 行,每行給出一對人名,格式為 名1 姓1 名2 姓2。注意 這裡的姓是不帶字尾的。四個字...