hdu 4612 強連通分量

2021-06-17 19:17:40 字數 1038 閱讀 4353

題意:

有一些小島,這些小島上有一些邊,讓你加一條邊,使得原先的那些邊的橋數最少。

做法:1,把小島為點,連線小島的為邊建圖。

2,求出圖中的所有強聯通分量

3,把所有的強聯通分量看成乙個點建樹。

4,求樹的直徑,新加的那條邊應該在直徑的兩邊,這樣才能使得圖中的橋最小。

#pragma comment(linker, "/stack:1024000000,1024000000")

#include#include#include#include#include#include#includeusing namespace std;

#define maxn 200003

#define mem(a,b) memset(a,b,sizeof(a))

vectorq[maxn];

stackqq;

struct list

edge[maxn*10];

struct ll

node[maxn*5];

int tops,times,nums,n,m;

int dnf[maxn];

int low[maxn];

int instack[maxn];

int head[maxn*10];

int vis[maxn*10];

int dist[maxn];

int num[maxn];

int visit[maxn];

void add(int x,int y)

void tarjan(int x)

else if(instack[y])

}if(low[x]==dnf[x])

nums++;

}}int spfa(int x)

queuepp;

pp.push(x);

dist[x]=0;

visit[x]=1;

while(!pp.empty())

}return ip;

}int main()

for(i=0;i

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

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

HDU 4612 雙聯通分量 樹的直徑

點選開啟鏈結 題意 給乙個無向聯通圖,裡面可能有重邊,問新增一條邊後,使得圖中的橋最小,將橋的數量輸出 思路 剛剛讀完題,就有了思路去寫,無非就是將聯通圖雙聯通分量後縮點,然後求一條最長的路,首尾相連,肯定將更多的橋包含使得這些橋不再是橋,很好想的題,但是錯了20 什麼鬼,md重邊這麼難處理,醉了 ...

強連通分量 tarjan求強連通分量

雙dfs方法就是正dfs掃一遍,然後將邊反向dfs掃一遍。挑戰程式設計 上有說明。雙dfs 1 include 2 include 3 include 4 include 5 6using namespace std 7const int maxn 1e4 5 8 vector g maxn 圖的鄰...