思路:可以求出所有的橋,把橋刪掉。然後把所有的連通分支求出來,顯然這些連通分支就是原圖中的雙連通分支。把它們縮成點,然後添上剛才刪去的橋,就構成了一棵樹。在樹上添邊使得樹變成乙個雙連通分支即可,這裡我們可以直接統計縮點後的葉子節點個數即可,從而要加的邊數即為(葉子節點個數+1)/2.
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8view codeusing
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
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之間所有的橋都會消失,我們可...