<๋ฌธ์ ๋งํฌ>
https://www.acmicpc.net/problem/2252
2252๋ฒ: ์ค ์ธ์ฐ๊ธฐ
์ฒซ์งธ ์ค์ N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. M์ ํค๋ฅผ ๋น๊ตํ ํ์์ด๋ค. ๋ค์ M๊ฐ์ ์ค์๋ ํค๋ฅผ ๋น๊ตํ ๋ ํ์์ ๋ฒํธ A, B๊ฐ ์ฃผ์ด์ง๋ค. ์ด๋ ํ์ A๊ฐ ํ์ B์ ์์ ์์ผ ํ๋ค๋ ์
www.acmicpc.net
<ํ์ด ์ ๋ต>
1. ๊ธฐ๋ณธ์ ์ธ ์์ ์ ๋ ฌ ๋ฌธ์ ์ด๋ค.
2. ์์์ ๋ ฌ์ ๋ํ ์์ธํ ์ค๋ช ์ (๋งํฌ)
<์ ๋ต ์ฝ๋>
from collections import deque
import sys, os, io, atexit
input = lambda: sys.stdin.readline().rstrip('\r\n')
stdout = io.BytesIO()
sys.stdout.write = lambda s: stdout.write(s.encode("ascii"))
atexit.register(lambda: os.write(1, stdout.getvalue()))
# 221003 2252 ์ค ์ธ์ฐ๊ธฐ
# ์ ๋ต์ฝ๋
# N: ์ ์ ๊ฐ์, M: ๊ฐ์ ๊ฐ์
N, M = map(int, input().split())
# N: ๊ฐ ๋
ธ๋๋ณ ์ง์
์ฐจ์ ์ ์ฅ ๋ฆฌ์คํธ
indegree = [0 for _ in range(N + 1)]
# graph: ์ธ์ ๋ฆฌ์คํธ๋ก ๊ตฌํํ ๊ทธ๋ํ
graph = [[] for _ in range(N + 1)]
for _ in range(M):
node1, node2 = map(int, input().split())
# ๊ฐ์ ์ ๋ณด๋ฅผ ์ ์ฅํด์ฃผ๊ณ ์ง์
์ฐจ์๋ฅผ ๊ธฐ๋กํด์ค๋ค.
graph[node1].append(node2)
indegree[node2] += 1
# queue: ์์ ์ ๋ ฌ ์ ์ฌ์ฉํ ํ, result: ์ ๋ ฌ๋ ๊ฒฐ๊ณผ๊ฐ์ ๋ด์ ๋ฆฌ์คํธ
queue = deque()
result = []
# ์ง์
์ฐจ์๊ฐ 0์ธ ์ ์ ์ ํ์ ๋ด์์ค๋ค
for i in range(1, N + 1):
if indegree[i] == 0:
queue.append(i)
# ํ๊ฐ ๋น ๋๊น์ง ์์์ ๋ ฌ ์ํ
while queue:
# ์ง์
์ฐจ์๊ฐ 0์ธ ์ ์ ์ result์ ๋ด์์ค๋ค.
current = queue.popleft()
result.append(current)
# ์ธ์ ํ ์ ์ ์ ์ง์
์ฐจ์๋ฅผ 1์ฉ ๋บด์ค๋ค.
for next in graph[current]:
indegree[next] -= 1
# ์ธ์ ์ ์ ์ ์ง์
์ฐจ์๊ฐ 0์ด ๋์์ ๊ฒฝ์ฐ ํ์ ๋ด์์ค๋ค.
if indegree[next] == 0:
queue.append(next)
# ์ ๋ ฌ๋ ๊ฒฐ๊ณผ ์ถ๋ ฅ
print(*result)
'โญ Problem_Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1253 ์ข๋ค (Python/ํ์ด์ฌ) (1) | 2022.11.08 |
---|---|
[๋ฐฑ์ค] 1368 ๋ฌผ๋๊ธฐ (Python/ํ์ด์ฌ) (0) | 2022.10.16 |
[๋ฐฑ์ค] 17471 ๊ฒ๋ฆฌ๋งจ๋๋ง (Python/ํ์ด์ฌ) (0) | 2022.10.14 |
[๋ฐฑ์ค] 16236 ์๊ธฐ์์ด (Python/ํ์ด์ฌ) (0) | 2022.10.13 |
[๋ฐฑ์ค] 12100 2048 (Easy) (Python/ํ์ด์ฌ) (1) | 2022.10.11 |
๋๊ธ