๐Ÿค–/๋ฐฑ์ค€

๋ฐฑ์ค€ 2252: ์ค„ ์„ธ์šฐ๊ธฐ (Python)

sssbin 2022. 8. 5. 22:26

 

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

 

 

import sys
from collections import deque
input = sys.stdin.readline

n, m = map(int, input().split())

students = [[] for _ in range(n+1)] # ๊ฐ„์„ ์— ๋Œ€ํ•œ ์ •๋ณด (์ˆœ์„œ ์ €์žฅ)
indegree = [0] * (n+1) # ์ง„์ž…์ฐจ์ˆ˜

for _ in range(m):
    a, b = map(int, input().split())
    students[a].append(b)
    indegree[b] += 1

q = deque()
res = []

for i in range(1, n+1):
    if indegree[i] == 0:
        q.append(i) # ์ง„์ž…์ฐจ์ˆ˜๊ฐ€ 0์ธ ๋…ธ๋“œ๋ฅผ ํ์— ๋„ฃ๋Š”๋‹ค.

while q:
    now = q.popleft() # ํ์—์„œ ์›์†Œ๋ฅผ ๊บผ๋‚ด์„œ
    res.append(now)
    for i in students[now]:
        indegree[i] -= 1 # ํ•ด๋‹น ๋…ธ๋“œ์—์„œ ์ถœ๋ฐœํ•˜๋Š” ๊ฐ„์„ ์„ ์ œ๊ฑฐํ•œ๋‹ค.
        if indegree[i] == 0:
            q.append(i) # ์ƒˆ๋กญ๊ฒŒ ์ง„์ž…์ฐจ์ˆ˜๊ฐ€ 0์ด ๋œ ๋…ธ๋“œ๋ฅผ ํ์— ๋„ฃ๋Š”๋‹ค.

for i in res:
    print(i, end=' ')