๐ง Strongly Connected
๋ฐฉํฅ ๊ทธ๋ํ์์๋ ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์ ๋์ผํ๊ฒ Connectivity(์ฐ๊ฒฐ์ฑ)๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.
๋ฐฉํฅ ๊ทธ๋ํ์์์ Connectivity๋ ๋ณดํต Strongly Connected ๋ก ์ ์๋๋ฉฐ, ํด๋น ์ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$G$ ๋ Strongly Connected ํ๋ค :
์์์ ์๋ก ๋ค๋ฅธ ๋ ์ ์ $v$, $u$ $\in V(G)$ ์ ๋ํ์ฌ,
$v$ ์์ $w$ ๋ก์ Path์,
$w$ ์์ $v$ ๋ก์ Path๊ฐ ์กด์ฌํ๋ค.
๐ง Strongly Connected Components (๊ฐํ ์ฐ๊ฒฐ ์์)
๊ทธ๋ํ $G$์ ๋ํ Strong Connected Component $G'$ :
$G$ ์ Maximal Strongly Connected Subgraph
$G$ ์ Strongly Connnected Component๋ $G$ ์ Vertex ๋ค์ Partitioning ํฉ๋๋ค.
์ด์ ๋ถํฐ ์ด๋ ํ ๋ฐฉํฅ ๊ทธ๋ํ $G$ ๊ฐ ์ฃผ์ด์ก์ ๋, $G$ ์ ๊ฐํ ์ฐ๊ฒฐ ์์(SCC)๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๐ง SCC ์๊ณ ๋ฆฌ์ฆ - 1
๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ฐฉํฅ ๊ทธ๋ํ $G$ ์ ๋ชจ๋ edge๋ค์ ๋ฐฉํฅ์ ๋ค์ง์ ๊ทธ๋ํ๋ฅผ $G^R$ ์ด๋ผ๊ณ ํ๊ฒ ์ต๋๋ค.
$G$ ์ $G'$ ์ ์ฌ์ฉํ์ฌ SCC๋ฅผ ์ฐพ์๋ ๋๋ค.
๊ทธ๋ํ์ ์กด์ฌํ๋ ๊ฐ๊ฐ์ ์ ์ $v$ ์ ๋ํ์ฌ, $G$ ์ $G^R$ ๋ก๋ถํฐ explore๋ฅผ ์ํํฉ๋๋ค.
$G$ ์์ reachableํ ์ ์ ๋ค์ ์งํฉ์ $S_1$ ์ด๋ผ ํ๊ณ ,
$G^R$ ์์ reachableํ ์ ์ ๋ค์ ์งํฉ์ $S_2$ ๋ผ ํ๊ฒ ์ต๋๋ค.
์ด๋ $S = S_1 \cap S_2 $ ์ ์ํ ์ ์ ๋ค์, $G$ ์ SCC๋ฅผ ์ด๋ฃน๋๋ค.
๐ ์ฆ๋ช
์ฃผ์ฅ
$S = S_1 \cap S_2 $ ์ ์ํ ์ ์ ๋ค์, $G$ ์ SCC๋ฅผ ์ด๋ฃฌ๋ค.
์ฆ๋ช
$S$ ์ ์ํ ์์์ ๋ ์ ์ ์ $u$, $w$ ๋ผ ํ๊ฒ ์ต๋๋ค.
$S$ ์ ์ ์์ ์ํ์ฌ,
(1) $v$ ์์ $u$ ๋ก์ Path, ($G$ ์ ์ํ์ฌ)
(2) $u$ ์์ $v$ ๋ก์ Path, ($G^R$ ์ ์ํ์ฌ)
(3) $v$ ์์ $w$ ๋ก์ Path, ($G$ ์ ์ํ์ฌ)
(4) $w$ ์์ $v$ ๋ก์ Path, ($G^R$ ์ ์ํ์ฌ)
๊ฐ ์กด์ฌํฉ๋๋ค.
(2)์ (3)์ ํตํด $u$ ์์ $w$ ๋ก์ Path๊ฐ ์กด์ฌํ๋ฉฐ
(4)์ (1)์ ํตํด $w$ ์์ $u$ ๋ก์ Path๊ฐ ์กด์ฌํฉ๋๋ค.
๋ฐ๋ผ์ $S$ ์ ์ํ ์ ์ ๋ค์ $G$ ์ SCC๋ฅผ ์ด๋ฃน๋๋ค.
์ด๋ maximality ์ ๋ํ ์ฆ๋ช ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$S_1 \cap S_2$ ์ ์ํ๋ ์ ์ ๋ค๊ณผ ๊ฐ์ ์ผ๋ก ๊ตฌ์ฑ๋ ๊ทธ๋ํ $G'$ ์ ๋ํ์ฌ,
ํด๋น ๊ทธ๋ํ $G'$ ๊ฐ Strongly Connected ํ์ง๋ง maximal ์กฐ๊ฑด์ ์ถฉ์กฑํ์ง ์๋๋ค๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด $G'$ ์ ์ํ์ง ์์ผ๋ฉฐ ๊ธฐ์กด ๊ทธ๋ํ $G$ ์๋ ์กด์ฌํ๋ ์์์ ์ ์ $u$ ์ ๋ํ์ฌ,
์ด๋ค๋ก ์ด๋ฃจ์ด์ง $G'$ ๋ณด๋ค ๋ ํฐ Strongly Connected Graph๊ฐ ์กด์ฌํฉ๋๋ค. ์ด๋ฅผ $G_m$ ์ด๋ผ ์ ์ํ๊ฒ ์ต๋๋ค.
์ผ๋ฐ์ฑ์ ์์ง ์๊ณ ํด๋น ์ ์ u๊ฐ S_1์ ์กด์ฌํ๋ค๊ณ ํ๊ฒ ์ต๋๋ค.
$S_1 \cap S_2$ ์ ์ํ๋ ์์์ ์ ์ $v$ ์ ๋ํ์ฌ, $v$ ์ $u$ ๋ $G_m$ ์ ์ํ๋ฏ๋ก
$v \to u$ ๋ก์ path์ $u \to v$ ๋ก์ path๊ฐ ์กด์ฌํด์ผ ํฉ๋๋ค.
๊ทธ๋ฌ๋ $u$ ๋ $S_1$ ์๋ ์ํ์ง๋ง $S_1 \Cap S_2$ ์ ์ํ์ง ์์ผ๋ฏ๋ก $u \to v$ ๋ก์ path๊ฐ ์กด์ฌํ์ง ์์ต๋๋ค.
๋ฐ๋ผ์ ๊ฐ์ ์ ๋ชจ์์ด ๋ฐ์ํ์๊ณ , ์ฆ๋ช ์ด ์๋ฃ๋ฉ๋๋ค.
์๊ฐ ๋ณต์ก๋
$n$ : ์ ์ ์ ๊ฐ์
$m$ : ๊ฐ์ ์ ๊ฐ์
$G^R$ ์ ๊ตฌํ๋ ๋ฐ ๋๋ ์๊ฐ : $O(n + m)$
๋ชจ๋ ์ ์ ๋ค์ ๋ํ์ฌ $G$ ์ $G^R$ ์์ explore๋ฅผ ์ํํ๋ ์๊ฐ : $n \times O(n + m)$
๋ฐ๋ผ์ $O(n(n+m))$ ์์ $G$ ์ ๋ชจ๋ SCC๋ฅผ ๊ตฌํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ ๋๋ฌด ๋๋ฆฌ๋ฉฐ, ์ข ๋ ๋น ๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๐ง SCC ์๊ณ ๋ฆฌ์ฆ - 2
๋๋ฒ์งธ ์๊ณ ๋ฆฌ์ฆ์ DAG๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ์ ๋๋ค.
๋๋ฒ์งธ ์๊ณ ๋ฆฌ์ฆ์ ์ค๋ช ์ ์ํด $G_d$ ๋ฅผ ์ ์ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ฐฉํฅ ๊ทธ๋ํ $G$ ์ ๋ํ์ฌ,
$G$ ์ ๊ฐ SCC ๋ฅผ ํ๋์ ์ ์ ($S_1, S_2, ...$)์ผ๋ก ๋๊ณ ,
$S_1$ ์์ $S_2$ ๋ก ๊ฐ๋ Edge(๊ฐ์ )๊ฐ ์กด์ฌํ๋ฉด,
Edge($S_1$ ,$S_2$) ๋ฅผ ์ถ๊ฐํ ๋ฐฉํฅ ๊ทธ๋ํ๋ฅผ $G_d$ ๋ผ ํ๊ฒ ์ต๋๋ค.
์ด๋ $G_d$ ๋ DAG ์ ๋๋ค.
๋ง์ฝ DAG๊ฐ ์๋ ๊ฒฝ์ฐ, maximal ์กฐ๊ฑด์ ์๋ฐฐํ๊ฒ ๋ฉ๋๋ค.
๐ ์ฆ๋ช
์ด๋ค ๊ทธ๋ํ $G$ ์ ๋ํ์ฌ, $G$ ์ ์ํ๋ strongly connected component $V_1, V_2, ... V_n$ ์ผ๋ก ์ด๋ฃจ์ด์ง $G_d$ ์ ๋ํ์ฌ, $G_d$ ์ Cycle์ด ์กด์ฌํ๋ค๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค.
$G_d$ ์๋ Cycle์ด ์กด์ฌํ๋ฉฐ, ํด๋น Cycle์ ์กด์ฌํ๋ ๋ ์ ์ ์ $V_n, V_m$ ์ด๋ผ ํ๊ฒ ์ต๋๋ค.
์ด๋ $V_n$ ์ ์ํ ์์์ ์ ์ $w$ ์, $V_m$ ์ ์ํ๋ ์์์ ์ ์ $u$ ์ ๋ํ์ฌ $u \to w$ ๋ก์ path์ $w \to u$ ๋ก์ path๊ฐ ์กด์ฌํฉ๋๋ค.
$V_n + \left\{ u \right\}$ ๋ Strongly Connected์ด๋ฉฐ $V_n$ ๋ณด๋ค ํฌ๊ธฐ๊ฐ ํฌ๊ธฐ ๋๋ฌธ์ $V_n$ ์ Maximal ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์์ผ๋ฏ๋ก SCC๋ผ๋ ๊ฐ์ ์ ๋ชจ์์ ๋๋ค.
์ด์ DAG๋ฅผ ์ด์ฉํ์ฌ ๊ทธ๋ํ $G$ ์ SCC๋ฅผ ์ฐพ์๋ด๋ ๊ณผ์ ์ ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๋จผ์ $G_d$ ๋ ๋ค์๊ณผ ๊ฐ์ ์์ฑ์ ๊ฐ์ง๋๋ค.
$G_d$ ์ sink(OutDegree = 0) $s$ ์ ์ํ ์๋ฌด ์ ์ $v$ ๋ก๋ถํฐ reachableํ node๋ค์ ์งํฉ์,
$G$ ์์ ํ๋์ SCC ์งํฉ์ ์ด๋ฃน๋๋ค.
์ฆ $G_d$ ์ sink์ ์ํ ์๋ฌด ์ ์ ์ผ๋ก๋ถํฐ explore๋ฅผ ์งํํ๋ฉด SCC ํ๋๋ฅผ ๋ฐํ๋ฐ์ ์ ์์ต๋๋ค.
$G_d$ ๋ฅผ ์ฌ์ฉํ์ฌ $G$ ์ SCC ํ๋๋ฅผ ์ป์ด๋ด๋ ๋ฐฉ๋ฒ์ ์์๋์ผ๋, ๋ค์๊ณผ ๊ฐ์ ๋๊ฐ์ง ๋ฌธ์ ๊ฐ ์๋ก ์๊ฒผ์ต๋๋ค.
- $G_d$ ์ sink์ ์ํ ์ ์ ๋ค ์ค ํ๋๋ฅผ ์ด๋ป๊ฒ ์ฐพ์ ์ ์๋?
- $G_d$ ์ sink์ ํด๋นํ๋ SCC๋ฅผ ์ฐพ์ ํ, ๋๋จธ์ง SCC๋ค์ ์ด๋ป๊ฒ ์ฐพ์ ์ ์์๊น?
์ด์ ํด๋น ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ฒซ๋ฒ์งธ ๋ฌธ์ : $G_d$ ์ Sink์ ์ํ ์ ์ ์ฐพ์๋ด๊ธฐ
$G_d$ ์ Sink์ ์ํ ์ ์ ์ ์ฐพ์๋ด๋ ๊ฒ์ ์ด๋ ต์ง๋ง,
$G_d$ ์ Source์ ์ํ ์ ์ ๋ค์ ๋ค์ ์์ฑ์ ์ํด ์ฝ๊ฒ ์ฐพ์ ์ ์์ต๋๋ค.
$G_d$ ์ ๋ ์ ์ (์ฆ $G$ ์์์ SCC) $S_1$, $S_2$ ์ ๋ํ์ฌ,
Edge($S_1$, $S_2$) ๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค.
$G$ ์์ DFS๋ฅผ ํ๋ฉด,
$S_1$ ์ ๊ฐ์ฅ ํฐ post number($S_1$ ์ ๋ชจ๋ ์ ์ ๋ค ์ค postOrder ๊ฐ์ด ๊ฐ์ฅ ํฐ ์ ์ ) ๋ ์ธ์ ๋
$S_2$ ์ ๊ฐ์ฅ ํฐ post number ๋ณด๋ค ํฝ๋๋ค.
๐ ์ฆ๋ช
Case 1
$S_1$ ์ ์กด์ฌํ๋ ์ ์ $v$ ๋ก๋ถํฐ explore๋ฅผ ์ํํ๋ ๊ฒฝ์ฐ,
Edge($S_1$, $S_2$) ๊ฐ ์กด์ฌํ๋ฏ๋ก,
$S_2$ ์ ๋ชจ๋ ์ ์ ์ $v$ ์์ Reachableํฉ๋๋ค.
์ฆ DFS Tree์์ $S_1$, $S_2$ ์ ๋ชจ๋ ์ ์ ๋ค์ด $v$ ์ Descendent์ ๋๋ค.
๋ฐ๋ผ์ $S_1$ ์ post number๊ฐ $S_2$ ์ post number๋ณด๋ค ํฝ๋๋ค.
Case 2
$S_2$ ์ ์๋ ์ ์ $u$ ๋ก๋ถํฐ explore๋ฅผ ์ํํ๋ ๊ฒฝ์ฐ,
$u$ ๋ฅผ root๋ก ๊ฐ์ง๋ DFS Tree ๋ $S_1$ ์ ์ด๋ ํ ์ ์ ๋ค๋ Descendent๋ก ๊ฐ์ง ์ ์์ต๋๋ค.
๋ฐ๋ผ์ $S_2$ ์ ์๋ ์ ์ ๋ค์ explore ํ ๋ค $S_1$ ์ ์๋ ์ ์ ๋ค์ explore ํ๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์ $S_1$ ์ post number๊ฐ $S_2$ ์ post number๋ณด๋ค ํฝ๋๋ค.
์ ์์ฑ์ ํตํด $G_d$ ์ Sink์ ์ํ ์ ์ ์ ์ฝ๊ฒ ์ฐพ์๋ผ ์ ์์ต๋๋ค.
์ ์์ฑ์ ์ํด $G_d$ ์ Source(InDegree = 0)๋ $G$ ์์ ๊ฐ์ฅ ํฐ post number๋ฅผ ๊ฐ์ง ์ ์ ์ ๋ฌด์กฐ๊ฑด ํฌํจํฉ๋๋ค.
$G_d$ ์ $G^{R}_{d}$ ๋ ๊ฐ์ Vertex Set์ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก( ์ฆ ๊ฐ์ SCC๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก ),
$G_d$ ์ Sink๋ $G^{R}_{d}$ ์ Source ์ ๋๋ค.
๋ฐ๋ผ์ $G^R$ ์์ DFS๋ฅผ ์ํํ ํ, ๊ฐ์ฅ ๋์ PostOrder ๊ฐ์ ๊ฐ์ง ์ ์ (์ฆ $G^{R}_{d} $ ์ Source ์ ์ํ ์ ์ )์
$G_d$ ์ Sink์ ๋ฌด์กฐ๊ฑด ์ํด ์์ต๋๋ค.
(์ฒซ๋ฒ์งธ ๋ฌธ์ ํด๊ฒฐ!)
๋๋ฒ์งธ ๋ฌธ์ : $G_d$ ์ Sink์ ํด๋นํ๋ SCC๋ฅผ ์ฐพ์ ํ, ๋๋จธ์ง SCC ์ฐพ์๋ด๊ธฐ
$G^{R}_{d}$ ์์ Source๋ฅผ ์ ๊ฑฐํ ๋ค,
$G^{R}_{d}$ ์ Source์ ํด๋นํ๋ ์ ์ ๋ค์ $G$ ์์ ์ ๊ฑฐํ๋๋ผ๋,
์์์ ์ดํด๋ณธ ์์ฑ์ ์ํ์ฌ, ๋จ์์๋ ์ ์ ๋ค ์ค์์ ๊ฐ์ฅ Post Number๊ฐ ํฐ ์ ์ ์
์๋ก์ด( = Source๊ฐ ์ ๊ฑฐ๋) $G^{R}_{d}$ ์ Source, ์ฆ $G_d$ ์ Sink์ ์ํฉ๋๋ค.
๋ฐ๋ผ์ ๋จ์์๋ ์ ์ ๋ค์ ๋ํ์ฌ ์ ๊ณผ์ ์ ์ฌ๊ท์ ์ผ๋ก ์ํํ์ฌ ๊ตฌํ ์ ์์ต๋๋ค.
์๋์ฝ๋
์์
โญ๏ธ ์ฐ์ต๋ฌธ์
๋ค์์ ๋ฐฑ์ค์ ์๋ SCC ๊ธฐ๋ณธ ๋ฌธ์ ์ ๋๋น
ํ๋ฒ ํ์ด๋ณด์ธ์ฉ :D
https://www.acmicpc.net/problem/2150
'๐ฅ Computer Science > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ๊ทธ๋ฆฌ๋ (0) -๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ (0) | 2022.10.13 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ์ ๋์จ ํ์ธ๋(Union-Find) ์๋ฃ๊ตฌ์กฐ (0) | 2022.10.03 |
[์๊ณ ๋ฆฌ์ฆ] ๊ทธ๋ํ (6) - ์์ ์ ๋ ฌ(Topological Sort) (1) | 2022.09.24 |
[์๊ณ ๋ฆฌ์ฆ] ๊ทธ๋ํ (5) - Directed Graph ์์์ DFS (0) | 2022.09.24 |
[์๊ณ ๋ฆฌ์ฆ] ๊ทธ๋ํ (4) - ์ด์ค ์ฐ๊ฒฐ ์์ (Biconnected Components) (0) | 2022.09.24 |