๐ ๋ฌธ์
์ฌํด Z๋ํ ์ปดํจํฐ๊ณตํ๋ถ์ ์๋ก ์ ํํ ๋ฏผ์ฑ์ด๋ ํ๋ถ์ ๊ฐ์ค๋ ๋ชจ๋ ์ ๊ณต๊ณผ๋ชฉ์ ๋ฃ๊ณ ์กธ์ ํ๋ ค๋ ์๋ํ ๋ชฉํ๋ฅผ ์ธ์ ๋ค. ์ด๋ค ๊ณผ๋ชฉ๋ค์ ์ ์๊ณผ๋ชฉ์ด ์์ด ํด๋น๋๋ ๋ชจ๋ ๊ณผ๋ชฉ์ ๋จผ์ ์ด์ํด์ผ๋ง ํด๋น ๊ณผ๋ชฉ์ ์ด์ํ ์ ์๊ฒ ๋์ด ์๋ค. ๊ณตํ์ธ์ฆ์ ํฌ๊ธฐํ ์ ์๋ ๋ถ์ํ ๋ฏผ์ฑ์ด๋ ์ ์๊ณผ๋ชฉ ์กฐ๊ฑด์ ๋ฐ๋์ ์ง์ผ์ผ๋ง ํ๋ค. ๋ฏผ์ฑ์ด๋ ์ ์๊ณผ๋ชฉ ์กฐ๊ฑด์ ์งํฌ ๊ฒฝ์ฐ ๊ฐ๊ฐ์ ์ ๊ณต๊ณผ๋ชฉ์ ์ธ์ ์ด์ํ ์ ์๋์ง ๊ถ๊ธํด์ก๋ค. ๊ณ์ฐ์ ํธ๋ฆฌํ๊ฒ ํ๊ธฐ ์ํด ์๋์ ๊ฐ์ด ์กฐ๊ฑด์ ๊ฐ์ํํ์ฌ ๊ณ์ฐํ๊ธฐ๋ก ํ์๋ค.
- ํ ํ๊ธฐ์ ๋ค์ ์ ์๋ ๊ณผ๋ชฉ ์์๋ ์ ํ์ด ์๋ค.
- ๋ชจ๋ ๊ณผ๋ชฉ์ ๋งค ํ๊ธฐ ํญ์ ๊ฐ์ค๋๋ค.
๋ชจ๋ ๊ณผ๋ชฉ์ ๋ํด ๊ฐ ๊ณผ๋ชฉ์ ์ด์ํ๋ ค๋ฉด ์ต์ ๋ช ํ๊ธฐ๊ฐ ๊ฑธ๋ฆฌ๋์ง ๊ณ์ฐํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์ฌ๋ผ.
๐์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์ ๊ณผ๋ชฉ์ ์ N(1 ≤ N ≤ 1000)๊ณผ ์ ์ ์กฐ๊ฑด์ ์ M(0 ≤ M ≤ 500000)์ด ์ฃผ์ด์ง๋ค. ์ ์๊ณผ๋ชฉ ์กฐ๊ฑด์ M๊ฐ์ ์ค์ ๊ฑธ์ณ ํ ์ค์ ์ ์ A B ํํ๋ก ์ฃผ์ด์ง๋ค. A๋ฒ ๊ณผ๋ชฉ์ด B๋ฒ ๊ณผ๋ชฉ์ ์ ์๊ณผ๋ชฉ์ด๋ค. A < B์ธ ์ ๋ ฅ๋ง ์ฃผ์ด์ง๋ค. (1 ≤ A < B ≤ N)
๐์ถ๋ ฅ
1๋ฒ ๊ณผ๋ชฉ๋ถํฐ N๋ฒ ๊ณผ๋ชฉ๊น์ง ์ฐจ๋ก๋๋ก ์ต์ ๋ช ํ๊ธฐ์ ์ด์ํ ์ ์๋์ง๋ฅผ ํ ์ค์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ถ๋ ฅํ๋ค.
๐ ๋ฌธ์ ํ์ด
์ ์ ๊ณผ๋ชฉ์ด๋ ํด๋น ๊ณผ๋ชฉ์ ๋ฃ๊ธฐ ์ด์ ์ ๋ค์ด์ผ ํ๋ ๊ณผ๋ชฉ์ด๋ค.
์์ ์ ๋ ฌ(Topology sort)์ ์ฌ์ฉํ์ฌ ํ์๋ค. ์์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์จํด์ด ์๋ ๋ฐฉํฅ ๊ทธ๋ํ์์์ ํ์ ์์๋ฅผ ํ์ ํ ๋ ์ฌ์ฉํ๋ค. pre ๋ผ๋ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด์ ๊ฐ ๋ ธ๋๋ง๋ค ํด๋น ๋ ธ๋๋ก ๋ค์ด์ค๋ ๊ฐ์ ์ ๊ฐฏ์๋ฅผ ์นด์ดํธํ๊ณ (A->B ๋ผ๋ฉด B์ +1) ์ ์ฅํ๋ค.
pre ์ ๊ฐ์ด 0์ด๋ฉด ํด๋น ๋ ธ๋๋ก ๋ค์ด์ค๋ ๊ฐ์ ์ด ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ด๊ธฐ์ pre ๊ฐ์ด 0์ธ ๋ ธ๋๋ ์ ์๊ณผ๋ชฉ์ด ์๋ค๋ ๊ฒ์ ๋ปํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋ ธ๋๋ฅผ ํ์ ์ฝ์ ํ๋ค. BFS ๋ ๋ ์ฒ๋ผ ์ฐ๊ฒฐ๋ ๊ฐ์ ์ ํ์ํ๊ณ ๊ทธ ๊ฐ์ ๊ณผ ์ฐ๊ฒฐ๋ ๋ ธ๋์ pre ๊ฐ์ -1 ํ๋ค. ์ด์ pre ๊ฐ์ด 0์ด๋ผ๋ฉด ์ ์๊ณผ๋ชฉ์ ๋ค ๋ค์๋ค๋ ๊ฒ์ ์๋ฏธํ๊ธฐ์ ํ์ ์ฝ์ ํ๋ค.
๐ป ์ฝ๋
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | from collections import deque n,m = map(int,input().split()) table = [[] for _ in range(n+1)] res = [0]*(n+1) pre = [0]*(n+1) for _ in range(m): a,b = map(int,input().split()) table[a].append(b) pre[b] += 1 queue = deque() for i in range(1, n+1): if pre[i]==0: queue.append([i,1]) while queue: node,cnt = queue.popleft() res[node] = cnt for i in table[node]: pre[i] -= 1 if pre[i] == 0: queue.append([i,cnt+1]) print(*res[1:]) | cs |
๐ ๋ฌธ์ ๋งํฌ ์ ์๊ณผ๋ชฉ
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 16932_๋ชจ์๋ง๋ค๊ธฐ - ํ์ด์ฌ (1) | 2022.09.30 |
---|---|
[๋ฐฑ์ค] 11780๋ฒ: ํ๋ก์ด๋ 2 - Python (0) | 2022.09.22 |
[๋ฐฑ์ค] 5427๋ฒ: ๋ถ - ํ์ด์ฌ (0) | 2022.09.11 |
[๋ฐฑ์ค] 2174๋ฒ: ๋ก๋ด ์๋ฎฌ๋ ์ด์ - ํ์ด์ฌ (0) | 2022.09.04 |
[๋ฐฑ์ค] 1219๋ฒ: ์ค๋ฏผ์์ ๊ณ ๋ฏผ - ํ์ด์ฌ (๋ฒจ๋ง ํฌ๋, BFS) (2) | 2022.08.28 |