ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฐฑ์ค: 14567 ์ ์๊ณผ๋ชฉ(Prerequisite)
dirmathfl 2021. 4. 13. 01:06๋ฌธ์
๋ฌธ์ ํ์ด
๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์๋ ์์ ์ ๋ ฌ์ ๋ํ ์ดํด๊ฐ ํ์ํ๋ค. ์ด์ ๋ํ ๊ฐ๋ ์ ์ดํดํ์๋ค๋ฉด ์์ ์ ๋ ฌ์ ๊ทธ๋๋ก ๊ตฌํํ ํ, ๋ค์ ์กฐ๊ฑด์ ์ดํดํ๋ฉด ์ฝ๊ฒ ๋ต์ ์ฐพ์ ์ ์๋ค.
- ์์ ์ ๋ ฌ์ ์ด์ฉํ๋ฉด ํ์ ์์๋ 1, 4, 6, 2, 3, 5์ด๋ค.
- 1, 4, 6 ๊ณผ๋ชฉ์ ์ ์ ๊ณผ๋ชฉ(์ง์
์ฐจ์๊ฐ 0)์ด ์๋ค.
- ์ ์ ๊ณผ๋ชฉ์ด ์๋ ๊ฒฝ์ฐ์ด๋ฏ๋ก 1ํ๊ธฐ์ ์๊ฐํ ์ ์๋ค.
- 2, 3์ ๊ฒฝ์ฐ ์ง์
์ฐจ์๊ฐ 1์ด๊ณ , ์ ์ ๊ณผ๋ชฉ์ 1์ด๋ค.
- ์ ์ ๊ณผ๋ชฉ์ด ์์ผ๋ฏ๋ก 1๋ฒ ๊ณผ๋ชฉ์ ์๊ฐํ ์ดํ์ ์๊ฐํ ์ ์๋ค.
- 5๋ฒ ๊ฐ์๋ ์ ์ ๊ณผ๋ชฉ์ด 2, 4 ์ด๋ฏ๋ก 2๊ฐ ๋ชจ๋ ์๊ฐํ์ฌ์ผ ์๊ฐํ ์ ์๋ค.
์ ์ ๊ณผ๋ชฉ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ๋ queue๋ฅผ ํตํด ์ง์ ์ฐจ์๋ฅผ ๊ฐ์ํ๋ ๊ณผ์ ์์ ์ ์ ๊ณผ๋ชฉ์ ์๊ฐ ํ๊ธฐ๋ฅผ ๊ณ ๋ คํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ํ์ฌ์ผ ํ๋ค. ์ด๋ `ํ์ฌ ์๊ฐ ๊ณผ๋ชฉ์ ํ๊ธฐ = ์ ์ ์๊ฐ ๊ณผ๋ชฉ์ ํ๊ธฐ + 1`์ด ๋๋ค. ์ด๋ ์์ ์ ๋ ฌ์ ํตํด, ์ ์ ๊ณผ๋ชฉ(์ง์ ์ฐจ์)์ด ๋ง์ ๊ณผ๋ชฉ(๋ ธ๋)์ ์ฐจํ์ ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ๋ค.
์ฆ, 2, 3 ๊ณผ๋ชฉ์ ๊ฒฝ์ฐ 1 ๊ณผ๋ชฉ์ดํ์ ์๊ฐํ์ฌ์ผ ํ๋ฏ๋ก 2ํ๊ธฐ์ ์๊ฐํ ์ ์๋ค. 5 ๊ณผ๋ชฉ์ ๊ฒฝ์ฐ 4 ๊ณผ๋ชฉ ์ดํ์ ์๊ฐํ๋ ์กฐ๊ฑด์ด๋ผ๋ฉด 2๊ฐ ๋๊ฒ ์ง๋ง 2 ๊ณผ๋ชฉ ์ดํ์ ์๊ฐ์ด๋ผ๋ ์กฐ๊ฑด๋ ์์ผ๋ฏ๋ก 2 + 1์ด ๋์ด 3ํ๊ธฐ์ ์๊ฐํ ์ ์๋ค. ๋ฐ๋ผ์ ์ด๋ฅผ ์ฝ๋๋ก ๊ตฌํํ๋ฉด ๋ฌธ์ ์์ ์ฐพ๊ณ ์ ํ๋ ๋ต์ธ `1 2 2 1 3 1`์ ๊ตฌํ ์ ์๋ค.
์ฝ๋
from sys import stdin
from collections import deque
PRE, IN_DEGREE = 0, 1
if __name__ == "__main__":
N, M = map(int, stdin.readline().split())
# ์ธ๋ฑ์ค๋ฅผ 1๋ฒ ๋ถํฐ ์ฌ์ฉํ๊ธฐ ์ํด + 1
result = [1] * (N + 1)
subject = [[set(), 0] for _ in range(N + 1)]
# ํ์ ๊ณผ๋ชฉ๋ค๊ณผ ์ง์
์ฐจ์ ์ฆ๊ฐ
for _ in range(M):
A, B = map(int, stdin.readline().split())
subject[A][PRE].add(B)
subject[B][IN_DEGREE] += 1
q = deque()
for idx, values in enumerate(subject):
if not idx:
continue
prerequisite, in_degree = values
# ์ต์ด ์ง์
์ฐจ์๊ฐ 0 ์ธ ๊ฒฝ์ฐ, queue์ ์ฝ์
if in_degree == 0:
q.append(idx)
while q:
cur_subject = q.popleft()
prerequisites = subject[cur_subject][PRE]
for pre in prerequisites:
subject[pre][IN_DEGREE] -= 1
# ์ง์
์ฐจ์๊ฐ 0์ด๋ผ๋ฉด, queue์ ์ฝ์
ํ ํ๊ธฐ ์ ํ์
if subject[pre][IN_DEGREE] == 0:
q.append(pre)
result[pre] = result[cur_subject] + 1
print(*result[1:])
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 20058 ๋ง๋ฒ์ฌ ์์ด์ ํ์ด์ด์คํฐ (2) | 2021.04.14 |
---|---|
๋ฐฑ์ค: 20055 ์ปจ๋ฒ ์ด์ด ๋ฒจํธ ์์ ๋ก๋ด (0) | 2021.04.13 |
๋ฐฑ์ค: 17485 ์ง์ฐ์ ๋ฌ ์ฌํ (Large) (0) | 2021.04.09 |
๋ฐฑ์ค: 1106 ํธํ (0) | 2021.04.07 |
๋ฐฑ์ค: 20056 ๋ง๋ฒ์ฌ ์์ด์ ํ์ด์ด๋ณผ (0) | 2021.04.05 |