求橋,邊雙連通縮點

2021-07-07 03:52:22 字數 1051 閱讀 4168

乙個無向圖,問最少新增多少條邊使任意兩點有兩條不同路徑。

即構造乙個邊雙連通圖,邊雙連通縮點後是一棵樹,度數為1的點為a,結論是需要新增(a+1)/2條邊。

#include#include#include#include#include#include#include#include#include#include#define ll long long

#define ull unsigned long long

#define debug puts("*****=");

#define inf (1<<30)

#define eps 1e-8

using namespace std;

const int maxn=6005;

const int maxe=20005;

struct edge

edge[maxe];

int head[maxn], tot;

int n,m;

int dfn[maxn],low[maxn];

bool vis_e[maxe]; //是否訪問了邊

bool is_bridge[maxe]; //是否是橋

int dfs_clock;

int block[maxn]; //點所屬邊雙

int block; //邊雙數

vectorvec[maxn]; //縮點後圖

bool vis[maxn];

void init(int n)

void addedge(int u, int v)

void dfs(int cur)

else if(dfn[tv] < dfn[cur] && !vis_e[i])

}}void find_bridge(int n)

void dfs(int u)

}//不經過橋的情況下,dfs求出每個變雙

void find_scc()

}int deg[maxn];

memset(deg,0,sizeof(deg));

for(int i=0; i

HDU 5409 雙連通縮點

hdu 5409 題意 給乙個圖一些邊,保證圖連通 問對於每條邊,如果去除該邊後使得圖中一些點不連通。設這些點 u,v 要求使 u盡量小,v盡量大,輸出這樣的 u,v 否則輸出 0 0。思路 感謝 基本的思路就是找橋,然後橋兩端找找對應的最大u 和最小v。自己寫的時候寫完找橋就不會了,而且找橋找的特...

POJ 3352 雙連通縮點求縮點樹葉子節點數

題意 給定n個點m條邊的無向圖 保證連通 問 至少加多少條邊可以使圖為雙連通圖 思路 雙連通圖即所有點都屬於至少乙個環中 顯然我們先把圖縮點得到一棵縮點樹,問題就轉成在縮點樹上加最少多少條邊使得圖為雙連通圖。對於n個節點的無根樹,至少要 1 left 2 條邊 left為葉子節點數 include ...

Tarjan求點雙連通分量

在乙個無向圖中,若任意兩點間至少存在兩條 點不重複 的路徑,則說這個圖是點雙連通的 簡稱雙連通,biconnected 在乙個無向圖中,點雙連通的極大子圖稱為點雙連通分量 簡稱雙連通分量,biconnected component,bcc 任意兩點間至少存在兩條點不重複的路徑等價於圖中刪去任意乙個點...