【演算法學習】圓方樹——處理仙人掌的利器

Otue發表於2024-06-10

圓方樹大概分兩種,一個是圓方樹,一個是廣義圓方樹。

圓方樹

這可以解決仙人掌上的問題。

任意一條邊至多隻出現在一條簡單迴路的無向連通圖稱為仙人掌。

很多題解將其作為無向圖構建,本文將其構建為外向樹,在這個問題中兩種構建方式不會影響求解。

構建方式

記讀入的圖為原圖,構建的圓方樹為新圖。

首先,新圖保留著原圖的點集,這些點記為圓點。

將原圖任意一個點(實現中指定 \(1\) 號點即可)作為根節點,然後在原圖跑一遍 dfs。

每當找到一個環的時候,將進入環的點(也就是邊雙的根節點)記為頭節點,然後在新圖上對加一個方點,並讓頭節點向這個方點連邊,邊權為 \(0\),同時,方點向其它點 \(u\) 連邊,邊權為原圖中的 \(u\) 到頭節點的最短距離。

下面使原圖與對應新圖(圓方樹)的一個例子:

相關文章