題目:
找橋,縮點,總之都是板子;
對於每個葉子,互相連一條邊即可;若最後剩下乙個,則去和根節點連邊;
所以葉子節點數+1再/2即答案。
**如下:
#include#include#include
using
namespace
std;
int n,m,ct=1,head[5005],reg[5005],c[5005],dc,dfn[5005],low[5005
],tim,ans;
bool bri[10005
];struct
n}edge[
10005],dcc[10005
];void tarjan(int x,int
e)
else
if(i!=(e^1
)) low[x]=min(low[x],dfn[u]);
}}void dfs(intx)}
intmain()
tarjan(
1,0);
for(int i=1;i<=n;i++)
for(int i=2;i<=ct;i+=2
)
for(int i=1;i<=dc;i++)
if(reg[i]==1)ans++;
printf(
"%d\n
",(ans+1)/2
); }
return0;
}
Poj 3177 雙聯通分量
題目大意 分析題解 個人 相關鏈結 啟發總結 特別是第四個!以前我了解了low的定義,但是卻沒有發現這個區別 我們平時使用的low,都是其子孫通過 一條返祖邊直接到達的點來決定的。如果我們把這個限制取消掉,按照其提供的做法,可以很簡單的對雙聯通分量進行染色。poj3177 求新增多少條邊可變連通圖。...
poj 3177 邊連通分量
思路 dfs求出所有點的low值,然後對每個連通分量進行縮點,可以通過low來進行縮點。雖然在同一連通分量裡可能存在不同的low值,但這並不影響縮點。將每個連通分量縮為乙個點後,只要求出這個縮點後的樹上的葉子節點個數就行了。結果為 leaf 1 2。include include include i...
poj3177 雙連通分量
無向圖,存成有向圖,一條邊存成兩條 強連通的時候就會導致重邊形成環,用fa記錄來自的邊,注意並且用flag判斷是否只有一條那樣的反向邊 求需要添多少條邊成雙連通,記度為1的強連通分量數為ans,結果為 ans 1 2 include include include includeusing name...