種類並查集學習筆記

2021-10-17 19:09:45 字數 1094 閱讀 4569

簡單的擴充套件

種類並查集是一般並查集的擴充套件,如果說普通並查集處理的是父親與祖先的關係,那麼種類並查集在這基礎上還可以處理敵人與對立的關係

這道題的難點在於如何處理關押在不同監獄的罪犯的關係,這裡就可以用到種類並查集。

具體實施:

因為並不知道這個罪犯究竟關押在哪乙個監獄,因此將乙個罪犯由乙個點拆成兩個點,分別代表a監獄中的和b監獄中的。

若兩個罪犯i,j關押在不同的監獄中,就將a中的i與b中的j相連,a中的j與b中的i相連,表示可能i在a監獄,j在b監獄,或者i在b監獄,j在a監獄。

若兩個罪犯i,j關押在相同的監獄中,即代表a中的i與a中的j的祖先一致,或b中的i與b中的j的祖先一致,這樣當前這個衝突就無法避免了。

這道題的敵人關係由兩個變為了三個,即乙個種類不僅有敵人(獵物),還有天敵。

具體實施:

將乙個動物拆成3個點,分別代表在a,b,c中。

若兩個動物為同類,借鑑上一題的做法,a,b,c中都要連線。

若兩個動物i吃j,則根據食物鏈,a中的i連b中的j,b中的i連c中的j,c中的i連a中的j。

如何判斷假話?

若這句話表示i,j同類,則不能有i吃j,j吃i,即a中的i不能跟b中的j同祖先,b中的i不能跟a中的j同祖先。

若這句話表示i吃j,則不能有i,j同類,j吃i,即a中的j不能跟b中的i同祖先,a中的i,j不能同祖先。

擴充套件:

如果增加一句話:i為a/b/c種族。如何修改演算法?

這裡可以將「為a/b/c種族"也模擬成同類,增加3個動物,可以理解為a,b,c種族的首領。為a/b/c種族,即與本族的首領同類。

如果還要輸出最後a/b/c種族的動物的序號,則遍歷每乙個動物,將其跟a/b/c首領的祖先比較,相同則就是這個種族的動物。

容易觀察到若ai,

j!=b

i,

ja_!=b_

ai,j​!

=bi,

j​則第i行的變化次數與第j列的變化次數的奇偶性不同,即第i行與第j列對立,運用種類並查集的思想,將每一行每一列都拆成兩個點,模擬關押罪犯的做法。

判斷是否可行:對a中的每一行每一列,比較跟b中的那一行那一列的祖先是否一致,都不一致則可行。

種類並查集

先來經典題目poj 1182 其實我現在都不是很明白這個題是怎麼做的 這道題貌似是並查集和向量做的,其中的關係推斷現在不是很明白。只知道和根節點的關係有三種,一種是同類 rank x 0 一種是被根節點吃掉 rank x 1 一種是吃掉根基點 rank x 2 如果不是很明白這道題的話可以跳過這道題...

種類並查集

食物鏈 poj 1182 動物王國中有三類動物a,b,c,這三類動物的食物鏈構成了有趣的環形。a吃b,b吃c,c吃a。現有n個動物,以1 n編號。每個動物都是a,b,c中的一種,但是我們並不知道它到底是哪一種。有人用兩種說法對這n個動物所構成的食物鏈關係進行描述 第一種說法是 1 x y 表示x和y...

種類並查集

種類並查集是我自己分的類,下面是幾道相關的題,都要求分類。a bug s life 核心思想 不難發現,一旦我們有了兩個bug之間的關係,我們一定可以判斷出它們的性別異同,甚至可以相互推斷,比如 a 與 b 能 b 與 c 能 那麼就能推出 a,c 與 b 性別相反,我們把這三個成為已經建立了關係的...