小做了一下並查集相關的題目。就從最基礎的開始吧。
首先是並查集的介紹,非常好的一篇博文:
其次就是一些習題了。
首先是這道題目:[poj1308]is it a tree?
整道題就是需要你判斷給出乙個有向圖是不是一棵樹。這裡會使用到並查集來判環,算是並查集的基礎應用(也就是判斷元素是不是屬於乙個集合)。
然後是:[poj2236]wireless network
算是基礎應用的乙個小提公升。在修補電腦時,需要把周圍被修補的電腦合併起來,如果對並查集概念理解不透徹,會出岔子。
接著就要說到高階一點的並查集題目了。
[poj2492]a bug's life、[poj1182]食物鏈
這兩題就涉及到了乙個新名詞:種類並查集。
另外還有:帶權並查集
這一類需要在路徑壓縮時對值進行更新。感覺技巧在於對路徑壓縮的理解上(好吧,我也不清楚xd)。具體題目:[poj1988]cube stacking
這題之後可以用以下步驟嘗試區間並查集:先[hdu 3038]how many answers are wrong,然後[poj 1733]parity game每道題都會用到之前那道題的思想。區間並查集給我的感覺是:抓住區間端點的父結點,當父親結點相同時才進行比較,其它時候都是可以瞎扯淡的。並且都用上了路徑壓縮上的權值更新(準確點說是關係更新)。
最後說一道神奇的用並查集優化貪心的題目:[poj1456]supermarket
在整個查詢可用日期的過程中,使用了並查集來優化,每一次被使用後讓父親節點前移,不論是誰使用了這個日期,最終都會僅有乙個物品使用了這個日期,感覺用得非常巧妙呀。
嘛,因為刷的題也不多,就先到這吧。
並查集小結
並查集一類的題目最近也做了許多,相對來說,還是比較容易理解和實現的。最早開始接觸並查集是在學習用kruskal求最小生成樹的時候,後來接觸的題目多了,發現並查集還有好多用途,比如典型的判環,區間問題等等。學習並查集的過程中我發現,並查集的路徑壓縮十分重要,有時候對於題目限定的條件,在路徑壓縮的過程中...
並查集小結
並查集一類的題目最近也做了許多,相對來說,還是比較容易理解和實現的。最早開始接觸並查集是在學習用kruskal求最小生成樹的時候,後來接觸的題目多了,發現並查集還有好多用途,比如典型的判環,區間問題等等。學習並查集的過程中我發現,並查集的路徑壓縮十分重要,有時候對於題目限定的條件,在路徑壓縮的過程中...
並查集小結
並查集就是乙個可以連通一塊東西的工具。基礎 這麼理解吧,有一堆親戚,每次給你兩個人,告訴你他們是親戚,最後任意給你兩個人,問他們是不是親戚。這個時候,並查集就大顯神通了。我們可以每次輸入兩個數,如果這兩個數不在一塊,把這兩個數連線起來,到了最後,不就是變成了一棵樹了嗎?最後查詢時,每次看他們是不是在...