題意:給乙個無向圖,問最少加幾條邊變成邊-雙聯通
題解:求一次雙聯通,縮點,這樣就變成了一棵樹,結果就是(樹上的葉子節點+1)/2,葉子節點可以通過入度判斷
#include#includeview code#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;
}/************
***********
*/
poj 3352 邊雙連通分量
思路 可以求出所有的橋,把橋刪掉。然後把所有的連通分支求出來,顯然這些連通分支就是原圖中的雙連通分支。把它們縮成點,然後添上剛才刪去的橋,就構成了一棵樹。在樹上添邊使得樹變成乙個雙連通分支即可,這裡我們可以直接統計縮點後的葉子節點個數即可,從而要加的邊數即為 葉子節點個數 1 2.1 include...
POJ 3352 邊雙連通分量
題目鏈結 題目大意 乙個連通圖中,至少新增多少條邊,使得刪除任意一條邊之後,圖還是連通的。解題思路 首先來看下邊雙連通分量的定義 如果任意兩點至少存在兩條 邊不重複 的路徑,那麼說這個圖是邊雙連通的。那麼本題中,刪除任意一條邊,就可以看作是毀掉一條路徑,那麼只要至少還存在一條路徑即可。也就是說,轉化...
邊雙聯通分量
首先什麼是邊雙聯通分量?邊雙連通分量是指,在 無向圖 中刪除任意一條邊依舊聯通的聯通塊 之前講過強連通分量,這裡邊雙聯通分量的做法也需要利用tarjan演算法獲得邊雙聯通分量。對於邊雙聯通分量中還有乙個概念,就是橋。橋指的是 刪除該邊圖不再連通。對應的另乙個概念是 割點 割點的的是 如果除去此節點和...