๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โญ Problem_Solving/๋ฐฑ์ค€

[๋ฐฑ์ค€] 2252 ์ค„ ์„ธ์šฐ๊ธฐ (Python/ํŒŒ์ด์ฌ)

by ํฌ์ŠคํŠธ์‰์ดํฌ 2022. 10. 15.

<๋ฌธ์ œ ๋งํฌ>

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)

๋Œ“๊ธ€