並查集 合集

2021-09-30 05:32:20 字數 2021 閱讀 6558

我對一類帶權值的並查集的理解。  每個點對他父親的邊 就是鏈結這兩點之間的關係。 通過這個關係 把所有的子節點都指向 最後的大根節點。

然後利用遞迴的形式,更新所有關係; 使原來 滿足他父親的關係的邊,再轉化到 大根節點的時候邊的關係正確。

比如  a-> b-> c->d->e

現在只有 a->b b->c  c->d d->e 的關係。

然後 通過c->d d->e 可知道  c->e 的關係。

然後 由 b->c  c->e   可知道 b-> e 的關係;

然後 由a-> b b-> e   可知道 a->  e 的關係。

這樣每個節點都指向 大根節點 e 

對於兩個並查集的合併  比如 有 a-> b   a->f f->e 的關係 。 b 和e 都是並查集的大根節點 。

通過a   -> f

b        e

這樣就可以知道 b-> e的關係。

這個東西在張清泉 大牛的ppt 裡面有詳細的說明。 2010_bputacm_第一次交流_wolf5x.ppt

(好的題目在前面。難度可能相對較大)

ural 1003   很經典的題目,很多**上都有對他的講解。

主要思路跟上面差不多。 比較好的就是 把奇偶加減的轉化成為  xor 亦或符號(奇數加減奇數。偶數加減偶數可以看成 1^1,0^0   而偶數 加減奇數 或者 奇數加減偶數 可以看成 0^1 1^0),節約時間。乙個小小的優化。非常不錯。位運算確實強大。

黑書傻姑娘  82 頁 的題目。開始想錯了。 一開始一直沒想清楚中間的處理,因為覺得如果給的區間只有2 給的是偶數,豈不就只有是兩個1.其實不是,沒有考慮到還可以是0個1.

ural 1701 其實就是食物鏈和ural1003的變種。這道題我做的非常好,1y 這讓我內流滿面。後來看石牛的思想,居然一樣,看來我確實進步了。也許漸漸思想會進步,也有可能是人品。  還有就是這道題 ural 給的幾個資料很好。其實是降低了 trik 的難度。

ural 1701 題意:0的工資為0

n m

5 63 4 1200 代表 3比4多了1200的權值。

4 1 -5500

2 3 4300

3 0 8200

0 4 -7000

2 1 0

讓你求不符合的第一組。

演算法: 帶權值的並查集

這道題需要注意:

1, 並查集的時候可能出現負的權值,所以要調換順序 ,讀入的時候使權值為正值。  然後並查的時候把小的作為根節點。但要保證 0 的權值一直是0.

2, 要注意的就是0的位置,因為沒有出現0 之前所有的情況都是可以成立的。所以先處理0的情況。

其實這些都可以從題目當中的資料可以 體會出來。 所有資料很降低難度。

汪總 和石牛的思想也貼出來

論壇上的討論

汪總的部落格

poj 1182 我覺得應該算是基礎。 不過這道題 discuss 提出的那種向量方法,覺得很受侷限。不過想出此種方法的我膜拜之。此大牛也。

其實我覺得這道題應該是按三個並查集或者兩個來做是正解。 因為如果題目食物鏈不是三個 ,而是4個,甚至一百個。這個方法才能解。而上面那種方法太特殊。

poj 1988 

題意: m a b, 代表含b的鏈要並到含a的鏈條的後面。  c代表 輸出a 後面有多少個元素。

不知不覺就a了,我還以為會wa ,做法和 《演算法藝術》那本書的 81頁 ,銀河英雄傳說查不多。

三個 陣列, 乙個記錄 father 乙個記錄 在此鏈 中他前面有多少個,乙個記錄 在此鏈 中他後面有多少個。 合併的時候跟新。

並查集的一些思想

並查集實現起來很簡單,但要靈活運用是需要經驗積累的。。。其實說穿了,並查集中的集合就是相互間已經建立起某種聯絡的元素的集合,比如某個家族的所有成員就構成了乙個集合;如果兩個元素屬於不同的集合,那麼他們之間一定沒有關係; 假如這兩個元素產生了某種關係(這就好比兩個人結婚了)那麼這兩個集合中的所有元素之間也必然相應的建立起了聯絡,接下來為了分析問題的必要,就必須把這兩個集合合併起來union ,這方面網上資料很多,就不多說了。

作poj 2827

並查集合集

題目1 include include include include include includeusing namespace std const int maxn 1e6 10 int pre maxn maxx maxn num maxn int findfather int x whil...

演算法合集 並查集union find

並查集演算法主要分為quic find,quick union以及union find方法。但出於效率考慮,一般使用union find演算法進行實際操作。union find演算法的思想就是利用乙個陣列id記錄每個節點的父節點,例如現要將節點1 id 1 1 連線到節點2 id 2 2 則令id ...

並查集詳解 例題合集

擒賊先擒王 解密犯罪團夥 沒錯,就是他們,為了下層勞動階級的利益開始擾亂朝廷治安了。雖然他們是一家人,但是這些好漢們分成了許多隊伍分開出動,我們需要做的是確定他們分成了多少個隊伍。我們先來了解一下並查集 並查集,並查集是一種樹形結構,又叫 不相交集合 保持了一組不相交的動態集合,每個集合通過乙個代表...