<๋ฌธ์ ๋งํฌ>
https://www.acmicpc.net/problem/1766
1766๋ฒ: ๋ฌธ์ ์ง
์ฒซ์งธ ์ค์ ๋ฌธ์ ์ ์ N(1 ≤ N ≤ 32,000)๊ณผ ๋จผ์ ํธ๋ ๊ฒ์ด ์ข์ ๋ฌธ์ ์ ๋ํ ์ ๋ณด์ ๊ฐ์ M(1 ≤ M ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์ ๊ฑธ์ณ ๋ ์ ์์ ์์์ A,B๊ฐ ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ
www.acmicpc.net
<ํ์ด ์ ๋ต>
1. ์ฐ์ ์์ํ๋ก ์์์ ๋ ฌ์ ์ํํ๋ฉด ๋๋ ๋ฌธ์ ์ด๋ค.
2. ๋ฌธ์ ์ ์กฐ๊ฑด์ ์ฝ์ด๋ณด๋ฉด ๋น๊ต์ ๋ช ํํ๋ค.
- ๋จผ์ ํธ๋ ๊ฒ์ด ์ข์ ๋ฌธ์ ๊ฐ ์๋ ๋ฌธ์ ๋, ๋จผ์ ํธ๋ ๊ฒ์ด ์ข์ ๋ฌธ์ ๋ฅผ ๋ฐ๋์ ๋จผ์ ํ์ด์ผ ํ๋ค. -> ์์์ ๋ ฌ
- ๊ฐ๋ฅํ๋ฉด ์ฌ์ด ๋ฌธ์ ๋ถํฐ ํ์ด์ผ ํ๋ค. -> ์ฐ์ ์์ ํ
3. ์์์ ๋ ฌ ๊ณต๋ถํ๋ฉด์ ํผ ๋ฌธ์ ์๋๋ฐ ์์์ ๋ ฌ์์ ์๊ณ ํ์ด์ ๊ทธ๋ฐ์ง ๋ชฐ๋ผ๋ ๋์ด๋์ ๋นํด์ ์ฌ์ ๋ค.
<์ ๋ต ์ฝ๋>
import heapq
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 1766 ๋ฌธ์ ์ง
# ์ ๋ต์ฝ๋
# N: ๋ฌธ์ ์ ์, M: ์ ๋ณด์ ์
N, M = map(int, input().split())
# indegree: ์ง์
์ฐจ์, graph: ๊ทธ๋ํ๋ก ๋ํ๋ธ ๋ฌธ์ ๋ค์ ์ ํ ๊ด๊ณ
indegree = [0 for _ in range(N + 1)]
graph = [[] for _ in range(N + 1)]
for _ in range(M):
node1, node2 = map(int, input().split())
graph[node1].append(node2)
indegree[node2] += 1
# reuslt: ๊ฒฐ๊ณผ๋ฅผ ๋ด์ ๋ฆฌ์คํธ, queue: ์์์ ๋ ฌ ์ ์ฌ์ฉํ ๋ฐฐ์ด(์ฐ์ ์์ํ)
result = []
queue = []
# ์ง์
์ฐจ์๊ฐ 0์ธ ๋ฌธ์ ๋ค์ ์ฐ์ ์์ํ์ ๋ฃ์ด์ค๋ค.
for i in range(1, N + 1):
if indegree[i] == 0:
heapq.heappush(queue, i)
# ์ฐ์ ์์ํ(์ฌ์ด๋ฌธ์ ์ฐ์ )๋ฅผ ์ด์ฉํ์ฌ ์์์ ๋ ฌ์ ์ํํ๋ค.
while queue:
current = heapq.heappop(queue)
result.append(current)
for next in graph[current]:
indegree[next] -= 1
if indegree[next] == 0:
heapq.heappush(queue, next)
# ๊ฒฐ๊ณผ ์ถ๋ ฅ
print(*result)
'โญ Problem_Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 18405 ๊ฒฝ์์ ์ ์ผ (Python/ํ์ด์ฌ) (0) | 2022.10.10 |
---|---|
[๋ฐฑ์ค] 17142 ์ฐ๊ตฌ์ 3 (Python/ํ์ด์ฌ) (1) | 2022.10.07 |
[๋ฐฑ์ค] 1662 ์์ถ (Python/ํ์ด์ฌ) (1) | 2022.10.05 |
[๋ฐฑ์ค] 20057 ๋ง๋ฒ์ฌ ์์ด์ ํ ๋ค์ด๋ (Python/ํ์ด์ฌ) (0) | 2022.10.04 |
[๋ฐฑ์ค] 2437 ์ ์ธ (Python/ํ์ด์ฌ) (1) | 2022.10.03 |
๋๊ธ