POJ3177 Redundant Paths (雙聯通縮點)
求對於給定一個連通圖,加多少條邊可以變成邊雙連通圖。
一個有橋的連通圖要變成邊雙連通圖的話,把雙連通子圖收縮為一個點,形成一顆樹。需要加的邊為(leaf+1)/2 (leaf為葉子結點個數)。
對於此題,有重邊但重邊不加入計算。
重邊的話,要麼在開始去掉,要麼用橋來計算入度。
因為橋不屬於任何一個邊雙連通分支,其余的邊和每個頂點都屬於且只屬於一個邊雙連通分支。對於重邊而言,只有一對邊被標記為橋,而對於所有重邊來言,belong【u】和belong【v】都是不一樣的,那麼如果用belong【u】!=belong【v】作為添加入度條件的話,毫無疑問會多加的。
這麼說的話,縮點重新建圖的話,用橋來建更好一點,這樣新圖就不會有重邊。
代碼(用橋計算):
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include
#include
#include
#include