補最少的邊成強連通圖。
縮點後成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)
}else
if (instack[j] && low[i]>dfn[j])
}if (dfn[i]==low[i])
while (i!=j);
}}int main()
{ int t;
scanf("%d", &t);
while (t--)
{ scanf("%d %d", &n, &m);
clr(head, -1);
clr(instack, 0);
clr(dfn, 0);
clr(belong, 0);
while (!s.empty()) s.pop();
int u, v;
for (int i=0;i
HDU 2767 強連通縮點
如a能證明b 就建一條有向邊a b。對於乙個能互相證明的乙個集合,必然每個2個點都能相互到達,這樣的乙個集合就是乙個強連通集合。我們可以把他們看成乙個點,剩下的就是乙個dag圖了。如要都能相互到達,每個點必然出度 1,入度 1 所以統計有多少沒有入度的點和多少沒有出度的點,他們中最大的就是需要新增的...
hdu2767強連通加縮點
題目說了一大堆,前面的沒有用,就是讓你判斷要加幾條邊才能強連通,用到縮點的知識 二重迴圈,判斷鄰接表下乙個點是不是在強連通分量中,入度,出度分別儲存下來,輸出較大的那乙個 include include include include include include include include ...
hdu2767 強連通分量
hdu2767 proving equivalences 傳送門題意 給定乙個 n 1 leq n leq 20000 個頂點,m 0 leq m leq 50000 條邊的有向圖,至少新增幾條邊可以使得整個圖變成強連通圖?題解 強連通分量縮點,判斷每個點的出度或者入度是否為零,最終結果為出度為零的...