思路:
dfs求出所有點的low值,然後對每個連通分量進行縮點,可以通過low來進行縮點。雖然在同一連通分量裡可能存在不同的low值,但這並不影響縮點。將每個連通分量縮為乙個點後,只要求出這個縮點後的樹上的葉子節點個數就行了。結果為(leaf+1)/2。
#include#include#include
#include
#include
#include
#define maxn 1010
#define maxm maxn*10
using
namespace
std;
int index[maxn],degree[maxn],dfn[maxn],low[maxn],e,n,lab=0
,num,visit[maxn][maxn];
void
init()
struct
edgeedge[maxm];
void addedge(int
from, int
to)int dfs(int
u) low[u]=min(low[u],dfn[temp]);
}return0;
}int
solve()}}
return0;
}int
main()
}int ans=0
; dfs(1);
solve();
for(i=1;i<=n;i++)
if(degree[i]==1
) ans++;
printf(
"%d\n
",(ans+1)/2
); }
return0;
}
poj3177 雙連通分量
無向圖,存成有向圖,一條邊存成兩條 強連通的時候就會導致重邊形成環,用fa記錄來自的邊,注意並且用flag判斷是否只有一條那樣的反向邊 求需要添多少條邊成雙連通,記度為1的強連通分量數為ans,結果為 ans 1 2 include include include includeusing name...
Poj 3177 雙聯通分量
題目大意 分析題解 個人 相關鏈結 啟發總結 特別是第四個!以前我了解了low的定義,但是卻沒有發現這個區別 我們平時使用的low,都是其子孫通過 一條返祖邊直接到達的點來決定的。如果我們把這個限制取消掉,按照其提供的做法,可以很簡單的對雙聯通分量進行染色。poj3177 求新增多少條邊可變連通圖。...
邊雙連通分量 jarjan poj 3177
大意 給定乙個無向連通圖,判斷至少加多少的邊,才能使任意兩點之間至少有兩條的獨立的路 沒有公共的邊,但可以經過同乙個中間的頂點 思路 在同乙個雙連通分量裡的所有的點可以看做乙個點,收縮後,新圖是一棵樹,樹的邊便是原圖的橋。現在問題轉化為 在樹中至少新增多少條邊能使圖變成邊雙連通圖 即新增的邊的個數 ...