補了這個辣雞演算法吧..
定義:一張圖中任意一條邊最多隻會出現在乙個環中
對圖進行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:圓方樹中方點不會跟方點連邊
定義子仙人掌為:
定義:子仙人掌
以3:以r為根的仙人掌上p的子仙人掌即為以r為圓方樹的根的p的子樹中所有圓點這時候我們可以把環上的資訊儲存在方點上r r
為根的仙人掌上的點
p' role="presentation" style="position: relative;">p
p的子仙人掌是去除掉
p p
到r' role="presentation" style="position: relative;">r
r的所有簡單路徑後,
p 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...