poj 3352 邊雙連通分量

2021-09-08 09:40:09 字數 977 閱讀 5174

思路:可以求出所有的橋,把橋刪掉。然後把所有的連通分支求出來,顯然這些連通分支就是原圖中的雙連通分支。把它們縮成點,然後添上剛才刪去的橋,就構成了一棵樹。在樹上添邊使得樹變成乙個雙連通分支即可,這裡我們可以直接統計縮點後的葉子節點個數即可,從而要加的邊數即為(葉子節點個數+1)/2.

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8

using

namespace

std;

9#define maxn 2222

1011 stacks;

12 vectormap[maxn];

1314

intlow[maxn],dfn[maxn];

15int

color[maxn];

16bool

mark[maxn];

17int

degree[maxn];

18int

n,m,cnt,_count;

1920

void tarjan(int u,int

father)

21else

if(mark[v])34}

35if(low[u]==dfn[u])while(u!=v);44}

45}4647

intmain()

4863

for(int i=1;i<=n;i++)

66for(int i=1;i<=n;i++)71}

72}73 cnt=0;74

for(int i=1;i<=_count;i++)

77 printf("

%d\n

",(cnt+1)/2

);78}79

return0;

80}8182

8384

85

view code

POJ 3352 邊雙連通分量

題目鏈結 題目大意 乙個連通圖中,至少新增多少條邊,使得刪除任意一條邊之後,圖還是連通的。解題思路 首先來看下邊雙連通分量的定義 如果任意兩點至少存在兩條 邊不重複 的路徑,那麼說這個圖是邊雙連通的。那麼本題中,刪除任意一條邊,就可以看作是毀掉一條路徑,那麼只要至少還存在一條路徑即可。也就是說,轉化...

poj3352 邊 雙聯通分量

題意 給乙個無向圖,問最少加幾條邊變成邊 雙聯通 題解 求一次雙聯通,縮點,這樣就變成了一棵樹,結果就是 樹上的葉子節點 1 2,葉子節點可以通過入度判斷 include include include include include include include include include ...

poj3694 邊 雙連通分量 lca

題意 先給了一張無向圖,然後依次加邊,每次求橋的數量 題解 先用一次tarjan,我們可以標記橋的位置和記錄橋的數量同時記錄fa陣列,然後更新邊的時候我們可以用lca,因為在tarjan縮點之後得到了一顆樹,當連線a,b節點時,可以直觀的看出從a,b的最近公共祖先到a,b之間所有的橋都會消失,我們可...