仙人掌 圓方樹學習筆記

2022-05-18 11:51:19 字數 821 閱讀 4167

終於對仙人掌有了一點初步的理解.

仙人掌仙人掌是什麼?

仙人掌是乙個無向圖.

仙人掌有什麼特點?

仙人掌的每條邊只屬於乙個簡單環.

下面是乙個栗子

有什麼用呢?

我們可以先用\(tarjan\)找出環,然後處理.

下面是一道例題,\(bzoj4316\)

顯然,在環內\(dp\),把答案並到根(環中\(dfs\)序最小的點)上,然後在環外\(dp\)就行了.

詳細題解在這裡

下面是另一道例題,\(bzoj1023\)

我們用\(f[u]\)表示到\(u\)的最長距離.

還是每次找到環就\(dp\)一番,然後再環外\(dp\).

環內是乙個簡單的用單調佇列優化的區間\(dp\).

具體題解戳這裡

圓方樹有的時候,樸素的\(tarjan+dp\)可能無法解決某些問題.

我們需要構造圓方樹.

圓方樹是什麼?

對於仙人掌中所有的環,都新建乙個節點,連線環上所有節點.我們稱原來的點為圓點,新建的點為方點.

仙人掌上的橋就直接保留即可.

找環就\(tarjan\)即可.

比如上圖的仙人掌,構造的圓方樹長這樣

(其實\(7,8\)號點是方點)

圓方樹有一些很優秀的性質

下面是一道簡單的例題,\(bzoj2125\)

詳細題解在這裡

下面是一道困難的例題,\(cf487e\)

詳細題解在這裡

仙人掌 圓方樹學習筆記

補了這個辣雞演算法吧.定義 一張圖中任意一條邊最多隻會出現在乙個環中 對圖進行dfs,記錄dfs的編號形成一棵樹 顯然最後邊會分為兩類 樹邊和非樹邊 環一定是由一些樹邊和一條非樹邊構成的 對於仙人掌問題,可以考慮對dfs樹進行dp 在遇到環的時候,把環單獨拿出來考慮即可 為了解決大多數靜態仙人掌問題...

最短路 仙人掌圓方樹 LCA

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

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

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