我對一類帶權值的並查集的理解。 每個點對他父親的邊 就是鏈結這兩點之間的關係。 通過這個關係 把所有的子節點都指向 最後的大根節點。
然後利用遞迴的形式,更新所有關係; 使原來 滿足他父親的關係的邊,再轉化到 大根節點的時候邊的關係正確。
比如 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 ...
並查集詳解 例題合集
擒賊先擒王 解密犯罪團夥 沒錯,就是他們,為了下層勞動階級的利益開始擾亂朝廷治安了。雖然他們是一家人,但是這些好漢們分成了許多隊伍分開出動,我們需要做的是確定他們分成了多少個隊伍。我們先來了解一下並查集 並查集,並查集是一種樹形結構,又叫 不相交集合 保持了一組不相交的動態集合,每個集合通過乙個代表...