π Topological Sort
μΆμ² : https://www.acmicpc.net/problem/9470
π‘ νμ΄
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import sys
from collections import deque
input = sys.stdin.readline
T = int(input())
for _ in range(T):
k, m, p = map(int, input().split()) # ν
μ€νΈ μΌμ΄μ€ λ²νΈ, λ
Έλ κ°μ, κ°μ μ
graph = [[] for _ in range(m + 1)]
inDegree = [0] * (m + 1) # μ§μ
μ°¨μ
dp = [[0] * (m + 1) for _ in range(m + 1)]
end = 0 # λ§μ§λ§ λ
Έλ λ²νΈ
for _ in range(p): # κ·Έλνμ μ§μ
μ°¨μ μ€μ
a, b = map(int, input().split())
graph[a].append(b)
inDegree[b] += 1
queue = deque()
for i in range(1, m + 1): # μ§μ
μ°¨μκ° 0μΈ λ
Έλλ₯Ό queueμ μΆκ°
if inDegree[i] == 0:
queue.append(i)
dp[i][i] = 1
while queue:
x = queue.popleft()
end = x
for i in graph[x]:
inDegree[i] -= 1
dp[x][i] = dp[x][x]
if inDegree[i] == 0:
queue.append(i)
max_ = 0
count = 0
for row in range(1, m + 1):
if max_ != 0 and dp[row][i] == max_: # κ°μ₯ ν° κ°μ κ°μ μΉ΄μ΄ν
count += 1
elif dp[row][i] > max_: # κ°μ₯ ν° κ°μ κ°μ μ°ΎκΈ°
max_ = dp[row][i]
count = 1
dp[i][i] = max_ if count == 1 else max_ + 1
print(k, dp[end][end])
print(*result)
π ν΄μ€
1. μλμ κ°μ 2μ°¨μ 리μ€νΈ(μ΄ν dp)κ° μλ€κ³ κ°μ νλ€.

2. μ§μ μ°¨μκ° 0μΈ λ Έλμ λ²νΈλ₯Ό iλΌκ³ κ°μ νλ©΄, dp[i][i]μ 1λ‘ μ€μ νλ€.

3. λ Έλ aμμ λ Έλ bλ‘ κ°λ κ²½λ‘κ° μλ€λ©΄, μ§μ μ°¨μλ₯Ό κ°μμν€κ³ dp[a][b]μ κ°μ dp[a][a] κ°μΌλ‘ λ³ννλ€.

4. μ§μ μ°¨μκ° 0μ΄ λμλ€λ©΄, queueμ λ Έλ λ²νΈλ₯Ό λ£κ³ , μλμ 쑰건μ λ°λΌ dp ν μ΄λΈμ κ°μ κ°±μ νλ€.
- λ Έλ λ²νΈ vμμ ν΄λΉ λ Έλλ‘ λ€μ΄μ€λ κ°μ μμ μ€ κ°μ₯ ν° κ°μ iλΌκ³ νμμ λ
- ν΄λΉ λ Έλλ‘ λ€μ΄μ€λ λͺ¨λ κ° μ€μμ κ°μ μμκ° iμΈ κ°μ΄ 1κ°μ΄λ©΄, dp[v][v]μ κ°μ iλ‘ μ€μ νλ€.
- iμΈ κ°μ΄ 2κ° μ΄μμ΄λ©΄ dp[v][v]μ κ°μ i + 1λ‘ μ€μ νλ€.

5. κ³Όμ 3 ~ 4λ₯Ό λ°λ³΅νλ©΄ μλμ κ°μ dp ν μ΄λΈμ΄ λ§λ€μ΄μ§λ€.

6. λ§μ§λ§ λ Έλλ₯Ό vλΌκ³ νλ€λ©΄, νμ²κ³μ Strahler μμλ dp[v][v]κ° λλ€.

π£ κ³ λ €νμ§ μμλ λλ μ¬ν
dp[x][i] = dp[x][x]
- queue.popleft()λ₯Ό ν΅ν΄ λμ¨ λ Έλ λ²νΈκ° vλΌκ³ νμ λ, dp[v][v] κ°μ νμ μ‘΄μ¬νλ€.
dp[i][i] = max_ if count == 1 else max_ + 1
- μμ μ§μ μ΄ μλ λͺ¨λ λ Έλμλ μ§μ κ°μ μ΄ μ‘΄μ¬νλ―λ‘ λ³μ max_λ μ΅μ 1μ κ°μ κ°μ§κ² λλ€.
- dp[i][i]λ μμ μ§μ μ΄ μλκΈ° λλ¬Έμ, κ°μ₯ ν° κ°μ κ°μ iκ° 1κ°μΈμ§, 2κ° μ΄μμΈμ§λ§μ κ³ λ €νλ©΄ λλ€.