在乙個有向圖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 6view codeusing
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 }
縮點:
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,...