targin 強聯通分量 縮點

2022-06-19 03:33:12 字數 1394 閱讀 5667

在乙個有向圖g中,如果兩個頂點間至少存在一條路徑,稱兩個頂點強聯通。

如果所有頂點都強聯通,稱g是乙個強聯通圖。

非強聯通圖有向圖的極大強聯通子圖,稱為強聯通分量。

深度優先搜尋。

dfn(i):節點i被搜尋到的次序編號。

low(i):i或i的子樹能夠追溯到的最早的節點的次序號。

low i = min ( dfn i  , low j , dfn j)

當dfn i = low i 以 i 為根的的子樹上所有節點是乙個強聯通分量。

時間複雜度:o(n+m)

1 #include2 #include3 #include4 #include5 #include 6

using

namespace

std;

7 typedef long

long

ll;8

const ll mod=998244353;9

const

int n=1e5+100;10

const

int maxn=1e6;

11const

int maxl=sqrt(1e14)+1

;12 inline int

read()

15while(c >= '

0' && c <= '

9') x = x * 10 + c - '

0', c =getchar();

16return x *f;17}

18int

n,m;

19int link[n],len=0

,dfn[n],low[n],bok[n];

20int

belong[n],id,bcnt;

21 stacks;

22struct

node

23e[2*n];

26void insert(int xx,int

yy)27

32void targin(int

x)33

45else

if(bok[v])

4649}50

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

5161}62

63}64int

solve()

6573

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

74if(!dfn[i])

75targin(i);

767778}

7980

81int

main()

8295

96return0;

9798 }

view code

縮點:

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

}

強聯通分量targin模板 poj2186

poj2186 強聯通圖模板 節點數1w 邊數5w 79ms g includeconst int sz 50000 10 struct edge edge edge sz 存放邊 int head sz 每個節點的第一條邊的編號 int n,m 有n個節點,m條邊 int cnt 邊的編號 int...

強聯通分量

有向圖中 u可達 v不一定意味著v可達 u.相互可達則屬於同乙個強連通分量 strongly connected component,scc 最關鍵通用部分 強連通分量一定是圖的深搜樹的乙個子樹。1.演算法思路 基本思路 這個演算法可以說是最容易理解,最通用的演算法,其比較關鍵的部分是同時應用了原圖...

強聯通分量

include include include include include include include include using namespace std struct edge vectora 80005 b 80005 node 80005 int he 80005 int n,m,...