hdu2767強連通加縮點

2022-03-16 01:57:59 字數 1134 閱讀 4605

題目說了一大堆,前面的沒有用,就是讓你判斷要加幾條邊才能強連通,用到縮點的知識

二重迴圈,判斷鄰接表下乙個點是不是在強連通分量中,入度,出度分別儲存下來,輸出較大的那乙個

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define pi acos(-1)

#define ll long long

#define mod 1000000007

using

namespace

std;

const

int n=20005,maxn=100005,inf=0x3f3f3f3f

;int n,m;//

判斷是不是在棧中,2為在棧中,1為已訪問不在棧中,0為不在棧中

stacks;

vector

v[n],ans[n];

intdfn[n],low[n];

intinans[n],ins[n];

intnum,index;

intin[n],out

[n];

void tarjan(int

u)

else

if(ins[x]==2)low[u]=min(low[u],dfn[x]);

}if(dfn[u]==low[u])

}}int

main()

while(!s.empty())s.pop();

cin>>n>>m;

while(m--)

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

if(!dfn[i])

tarjan(i);

if(num==1

)

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

}int a=0,b=0

;

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

cout

}return0;

}

hdu 2767 強連通縮點

補最少的邊成強連通圖。縮點後成dag,max即為所求。include include include define mn 20020 define me 200010 define mm a,b as void add e int i,int u,int v void tarjan int i el...

HDU 2767 強連通縮點

如a能證明b 就建一條有向邊a b。對於乙個能互相證明的乙個集合,必然每個2個點都能相互到達,這樣的乙個集合就是乙個強連通集合。我們可以把他們看成乙個點,剩下的就是乙個dag圖了。如要都能相互到達,每個點必然出度 1,入度 1 所以統計有多少沒有入度的點和多少沒有出度的點,他們中最大的就是需要新增的...

hdu2767 強連通分量

hdu2767 proving equivalences 傳送門題意 給定乙個 n 1 leq n leq 20000 個頂點,m 0 leq m leq 50000 條邊的有向圖,至少新增幾條邊可以使得整個圖變成強連通圖?題解 強連通分量縮點,判斷每個點的出度或者入度是否為零,最終結果為出度為零的...