hdu 2767強連通分量練習

2022-07-28 22:03:34 字數 1143 閱讀 3346

判斷強連通圖之後,果斷要做做強連通分量的題目,之前做求割點的題目的時候就已經學過了tarjan演算法了。。  但是還是不會用,一開始看到這個題目的時候不知道怎麼辦,感覺就是有種怪怪的感覺。。  看了網上的**,出度和入度的判斷真的還蠻精妙的。。 

通過一邊tarjan演算法已經將乙個圖分解成了很多個前連通圖了。。。  這要計算出每乙個前連通分量的入度和出度來,然後新增的邊只要能使所有強連通分量連通就可以。。所以只用新增max(入度缺少,出度缺少)。。

view code

1   #include2

#define min(a,b) a3

#define max(a,b) a>b?a:b

4using

namespace

std;

5struct

node

6edge[50002];9

int head[20002],exist[20002],dfn[20002],low[20002],stack[20002],weight[20002

],n,m,s,e,top,count,time;

10int ind[20002],outd[20002

];11

void tarjan(int

u) 12

23else

2428}29

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

3037    count++;38}

39}40int

main()

4152    time=top=count=0;53

for(int i=0;i)

5460

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

61 66}

67if(count==1)

68else

6979

} 80}

81int maxin=0,maxout=0;82

for(int i=0;i)

8387    printf("

%d\n

",max(maxout,maxin));88}

89}90return

0;

91   }

hdu2767 強連通分量

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

Hdu 2767 把森林變成強連通分量 cpp

題意 給出n個點和他們之間的一些關係.問加多少條邊可以使所有的點變成強連通分量.思路 根據題意就可以知道有這個推理 原圖縮點後的有向無環圖.出度為0的點和入度為0的點中個數少的那些點向個數多的那些點連線.可以使森林變成強連通分量.tips 注意如果縮點後變成乙個點了.則入度為0和出度為0的點的個數都...

hdu 1269 hdu 2767 強連通分量)

1 include2 include3 include4 const int maxn 10000 10 5 using namespace std 6 vectormp maxn 7 stacks 8int n,m 9int count 10int cnt 11bool mark maxn 12i...