Jzoj4729 道路修建

2022-05-09 16:55:45 字數 889 閱讀 1432

給你乙個聯通無向圖,問你要修建幾條邊使得該圖是乙個邊雙連通圖

無比經典,肯定是乙個tarjan求橋,刪掉後縮點,變成一顆樹,看看有幾個葉子結點,葉子結點一對對連起來即可

#include

#include

#include

#include

using

namespace

std;

struct edge g[1000010];

int c=1,h[500010],dfn[500010],clk=0,col=0;

int n,m,low[500010],col[500010],d[500010];

bool b[1000010];

inline

void adj(int x,int y); h[x]=c;

g[++c]=(edge); h[y]=c;

}void tarjan(int u,int v)

else low[v]=min(low[v],low[w]);

} else low[v]=min(low[v],dfn[w]);

}}void dfs(int x,int u,int cl)

int main()

tarjan(0,1);

for(int i=1;i<=n;++i)

if(!col[i]) dfs(i,0,++col);

for(int i=2;i<=c;i+=2)

if(b[i])

int nodecnt=0;

for(int i=1;i<=col;++i) if(d[i]==1) nodecnt++;

printf("%d\n",(nodecnt+1)>>1);

}

JZOJ 1244 修建道路

description farmer john最近得到了一些新的農場,他想新修一些道路使得他的所有農場可以經過原有的或是新修的道路互達 也就是說,從任乙個農場都可以經過一些首尾相連道路到達剩下的所有農場 有些農場之間原本就有道路相連。所有n 1 n 1,000 個農場 用1.n順次編號 在地圖上都表...

JZOJ 3806 小X 的道路修建

因為一場不小的 y 省n 個城市之間的道路都損壞掉了,省長希望小x 將城市之間的道路重修一遍。很多城市之間的地基都被 破壞導致不能修路了,因此可供修建的道路只有m 條。因為施工隊伍有限,省長要求用盡量少的道路將所有的城市連通起來,這樣施工量就可以盡量少。不過,省長為了表示自己的公正無私,要求在滿足上...

Jzoj3806 小X 的道路修建

給你乙個圖,求乙個最大邊和最小邊差值最小的生成樹 首先我們可以列舉最小邊,每次跑乙個最小生成樹即可 但是這樣會超時,我們考慮優化 採用最優性剪枝,假設我們當前樹中的最小邊是i,當前邊是j,當前最優答案是ans,那麼對於所有邊k使得length j length k ans的邊在列舉最小邊的時候可以直...