仙人掌 圓方樹學習筆記

2021-08-27 03:40:47 字數 1663 閱讀 6312

補了這個辣雞演算法吧..

定義:一張圖中任意一條邊最多隻會出現在乙個環中

對圖進行dfs,記錄dfs的編號形成一棵樹

顯然最後邊會分為兩類

樹邊和非樹邊

環一定是由一些樹邊和一條非樹邊構成的

對於仙人掌問題,可以考慮對dfs樹進行dp

在遇到環的時候,把環單獨拿出來考慮即可…

為了解決大多數靜態仙人掌問題,我們就引入了這個演算法!

以下來自wc2017營員交流課件

仙人掌 g=

(v,e

) g=(

v,e)

的圓方樹t=

(vt,

et) t=(

vt,e

t)為滿足以下條件的無向圖: vt

=rt∪

st,r

t=v,

rt∩s

t=∅ vt=

rt∪s

t,rt

=v,r

t∩st

=∅,我們稱rtrt

集合為圓點、stst

集合為方點 ∀e∈e∀

e∈e,若 e

e不在任何簡單環中,則e∈

et' role="presentation" style="position: relative;">e∈e

te∈e

t對於每個仙人掌中的簡單環

r r

,存在方點 pr

∈st' role="presentation" style="position: relative;">pr∈

stpr

∈st,並且 ∀p∈r∀

p∈r滿 足 (p

r,p)

∈et (pr

,p)∈

et,即對每個環建方點連所有點

如果不想看 可以看下面我說的..

把圖中原有的所有點看成圓點

對於圖中任意乙個大於1的點雙,我們新建乙個方點,把這個點雙中的所有點向這個方點連邊

比如這張圖就是個很好的栗子(來自營員交流課件..)

有一些性質

1:圓方樹是一棵無根樹

2:圓方樹中方點不會跟方點連邊

定義子仙人掌為:

定義:子仙人掌

r r

為根的仙人掌上的點

p' role="presentation" style="position: relative;">p

p的子仙人掌是去除掉

p p

到r' role="presentation" style="position: relative;">r

r的所有簡單路徑後,

p p

所在的聯通塊

3:以r為根的仙人掌上p的子仙人掌即為以r為圓方樹的根的p的子樹中所有圓點這時候我們可以把環上的資訊儲存在方點上

然後就很舒服地

dp!!!!!!!!!!

仙人掌 圓方樹學習筆記

終於對仙人掌有了一點初步的理解.仙人掌仙人掌是什麼?仙人掌是乙個無向圖.仙人掌有什麼特點?仙人掌的每條邊只屬於乙個簡單環.下面是乙個栗子 有什麼用呢?我們可以先用 tarjan 找出環,然後處理.下面是一道例題,bzoj4316 顯然,在環內 dp 把答案並到根 環中 dfs 序最小的點 上,然後在...

最短路 仙人掌圓方樹 LCA

將原圖首先變成一棵樹,這裡就是對仙人掌進行圓方樹處理,於是接下去就是對新圖進行處理了。比較簡單的,就是我們搜到的lca點是圓點,那麼肯定此時的距離就是答案了,如果不是圓點呢?此時的lca點是方點的話,那麼最後的最短距離還不好說,因為存在可能走環的另一頭更近的可能性,或者它二者的距離可以更近,這裡的話...

BZOJ2125 最短路(仙人掌,圓方樹)

bzoj 求仙人掌上兩點間的最短路 終於要構建圓方樹啦 首先構建出圓方樹,因為是仙人掌,和一般圖可以稍微的不一樣 直接t arja n tar ja n縮點,對於每乙個強連通分量構建方點 只有乙個點的就不要建了 圓方邊的權值定義為到df s dfs tarjan t ar ja n不就是搞了一棵df...