poj3352 邊 雙聯通分量

2022-03-15 23:58:21 字數 1468 閱讀 8071

題意:給乙個無向圖,問最少加幾條邊變成邊-雙聯通

題解:求一次雙聯通,縮點,這樣就變成了一棵樹,結果就是(樹上的葉子節點+1)/2,葉子節點可以通過入度判斷

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define fi first

#define se second

#define mp make_pair

#define pb push_back

#define pii pair#define c 0.5772156649

#define pi acos(-1.0)

#define ll long long

#define mod 1000000007

#define ls l,m,rt<<1

#define rs m+1,r,rt<<1|1

using

namespace

std;

using

namespace

__gnu_cxx;

const

double g=10.0,eps=1e-7

;const

int n=1000+10,maxn=100000+10,inf=0x3f3f3f

;vector

v[n];

intdfn[n],low[n];

intindex,num;

mapma[n];

void tarjan(int u,int

f)

else low[u]=min(low[u],dfn[x]);

}}void dfs(int u,intf)}

intmain()

index=num=0

;

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

if(!dfn[i])

tarjan(i,-1

); memset(dfn,

0,sizeof

dfn);

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

if(!dfn[i])

memset(low,

0,sizeof

low);

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

int ans=0

;

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

printf(

"%d\n

",(ans+1)/2

);

return0;

}/************

***********

*/

view code

poj 3352 邊雙連通分量

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

POJ 3352 邊雙連通分量

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

邊雙聯通分量

首先什麼是邊雙聯通分量?邊雙連通分量是指,在 無向圖 中刪除任意一條邊依舊聯通的聯通塊 之前講過強連通分量,這裡邊雙聯通分量的做法也需要利用tarjan演算法獲得邊雙聯通分量。對於邊雙聯通分量中還有乙個概念,就是橋。橋指的是 刪除該邊圖不再連通。對應的另乙個概念是 割點 割點的的是 如果除去此節點和...