HDU 4612 雙聯通分量 樹的直徑

2022-04-08 23:57:50 字數 1007 閱讀 6648

點選開啟鏈結

題意:給乙個無向聯通圖,裡面可能有重邊,問新增一條邊後,使得圖中的橋最小,將橋的數量輸出

思路:剛剛讀完題,就有了思路去寫,無非就是將聯通圖雙聯通分量後縮點,然後求一條最長的路,首尾相連,肯定將更多的橋包含使得這些橋不再是橋,很好想的題,但是錯了20+什麼鬼,md重邊這麼難處理,醉了~~~,之前的做法是將重邊全部找出來,希望資料弱點水過去算了,tle好樣的,那麼我們在處理橋的時候,也就是找橋的時候,如果是橋,我們將這條邊標記一下,然後找所有邊時加上就行了,在乙個就是找樹的直徑,兩次bfs就可以,很簡單看看**把

#include

#include

#include

#include

#include

#include

#include

using namespace std;

typedef long long ll;

const int inf=0x3f3f3f3f;

const int maxn=200010;

struct edge

};vectorg[maxn];

vectorgg[maxn];

int l[maxn],e[maxn],vis[maxn],stack1[maxn];

int n,m,k,kk,cnt;

void dfs(int x,int fa)

}else l[x]=min(l[x],e[e.to]);

}else

}if(l[x]==e[x])

}}void tarjan()

}bfs(pos);

int ans=0;

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

return ans;

}int main(){

int flag,a,b;

while(scanf("%d%d",&n,&m)!=-1){

if(n==0&&m==0) break;

for(int i=0;i

hdu 4612 強連通分量

題意 有一些小島,這些小島上有一些邊,讓你加一條邊,使得原先的那些邊的橋數最少。做法 1,把小島為點,連線小島的為邊建圖。2,求出圖中的所有強聯通分量 3,把所有的強聯通分量看成乙個點建樹。4,求樹的直徑,新加的那條邊應該在直徑的兩邊,這樣才能使得圖中的橋最小。pragma comment link...

hdu 4612 求邊連通分量 求樹的直徑

題意 加一條邊,使得橋的數量最少?思路 求邊連通分量,縮點,然後變成乙個樹,樹邊都是橋,求樹的直徑。樹的直徑就是最多減少的橋。橋的數量最少就是原圖中的橋的數量 樹的直徑。要注意重邊。pragma comment linker,stack 1024000000,1024000000 include i...

HDU 4738 雙聯通分量

點選開啟鏈結 題意 給出乙個無向圖和每條邊的權值,現在破壞一條路使得圖不再聯通,只能破壞一條路,問最少需要的花費,花費為邊上的權值,注意的是,圖剛開始可能不連通,輸出1 花費最小的邊為0輸出1,其他沒什麼了 思路 求橋的模版題,在找到乙個橋時更新費用最小,對了還有乙個可能有重邊,簡單 include...