【算法專題】仙人掌圖問題


【參考】

仙人掌相關問題的處理方法(未完待續)

★WC2017-immortalCO Making Graph into Trees

【DFS樹】

仙人掌圖:每條邊至多在一個環上的圖。

仙人掌圖中每個環相當於一個點雙連通分量,那么用Tarjan算法處理dfs樹。

對於樹邊(low[y]>dfn[x])直接處理,環邊先忽略。

每個環只在其深度最小的點x處理,設深度最大的點為y,則找到(x,y)並進行處理(fa[y]≠x&&dfn[y]>dfn[x])。

例題:【BZOJ】1023: [SHOI2008]cactus仙人掌圖 靜態仙人掌(DFS樹) 求直徑,建立DFS樹,環上單調隊列維護。

例題:【BZOJ】4316: 小C的獨立集 靜態仙人掌 求最大獨立集,建立DFS樹,環上動態規划。

【圓方樹】

原圖每個點都是圓點,非環邊直接相連。對於每個環,新建一個方點連接這個環的所有圓點(環邊不連)。

建圖方法同DFS樹,在處理環的時候連接方點。取出一個環只要取出方點的所有鄰點即可(按順序)。

例題:【BZOJ】2125: 最短路 圓方樹(靜態仙人掌) 求多源最短路,建立圓方樹,找LCA。

【點雙】

對於無向連通圖,對每個點雙建立一個方點連向其中所有點並消除點雙內部的連邊,這樣就是廣義圓方樹。

例如經典的旅行問題:詢問帶點權無向圖中,兩點間所有簡單路徑的最小權值。

兩點間的簡單路徑並=兩點間的唯一點雙鏈。(如果存在一條其它路徑到達,則與已有點雙矛盾。)

所以建立廣義圓方樹后就是查詢樹鏈最小值的問題了。(每個方點的權=連接圓點的最小權)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM