๐ ๋ฌธ์
์ฐ๋ฆฌ๋ ์ด๋ค ์ฅ๋๊ฐ์ ์ฌ๋ฌ ๊ฐ์ง ๋ถํ์ผ๋ก ์กฐ๋ฆฝํ์ฌ ๋ง๋ค๋ ค๊ณ ํ๋ค. ์ด ์ฅ๋๊ฐ์ ๋ง๋๋๋ฐ๋ ๊ธฐ๋ณธ ๋ถํ๊ณผ ๊ทธ ๊ธฐ๋ณธ ๋ถํ์ผ๋ก ์กฐ๋ฆฝํ์ฌ ๋ง๋ ์ค๊ฐ ๋ถํ์ด ์ฌ์ฉ๋๋ค. ๊ธฐ๋ณธ ๋ถํ์ ๋ค๋ฅธ ๋ถํ์ ์ฌ์ฉํ์ฌ ์กฐ๋ฆฝ๋ ์ ์๋ ๋ถํ์ด๋ค. ์ค๊ฐ ๋ถํ์ ๋ ๋ค๋ฅธ ์ค๊ฐ ๋ถํ์ด๋ ๊ธฐ๋ณธ ๋ถํ์ ์ด์ฉํ์ฌ ๋ง๋ค์ด์ง๋ ๋ถํ์ด๋ค.
์๋ฅผ ๋ค์ด๋ณด์. ๊ธฐ๋ณธ ๋ถํ์ผ๋ก์ 1, 2, 3, 4๊ฐ ์๋ค. ์ค๊ฐ ๋ถํ 5๋ 2๊ฐ์ ๊ธฐ๋ณธ ๋ถํ 1๊ณผ 2๊ฐ์ ๊ธฐ๋ณธ ๋ถํ 2๋ก ๋ง๋ค์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ์ค๊ฐ ๋ถํ 6์ 2๊ฐ์ ์ค๊ฐ ๋ถํ 5, 3๊ฐ์ ๊ธฐ๋ณธ ๋ถํ 3๊ณผ 4๊ฐ์ ๊ธฐ๋ณธ ๋ถํ 4๋ก ๋ง๋ค์ด์ง๋ค. ๋ง์ง๋ง์ผ๋ก ์ฅ๋๊ฐ ์์ ํ 7์ 2๊ฐ์ ์ค๊ฐ ๋ถํ 5, 3๊ฐ์ ์ค๊ฐ ๋ถํ 6๊ณผ 5๊ฐ์ ๊ธฐ๋ณธ ๋ถํ 4๋ก ๋ง๋ค์ด์ง๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์ ์ฅ๋๊ฐ ์์ ํ 7์ ๋ง๋๋๋ฐ ํ์ํ ๊ธฐ๋ณธ ๋ถํ์ ๊ฐ์๋ 1๋ฒ 16๊ฐ, 2๋ฒ 16๊ฐ, 3๋ฒ 9๊ฐ, 4๋ฒ 17๊ฐ์ด๋ค.
์ด์ ๊ฐ์ด ์ด๋ค ์ฅ๋๊ฐ ์์ ํ๊ณผ ๊ทธ์ ํ์ํ ๋ถํ๋ค ์ฌ์ด์ ๊ด๊ณ๊ฐ ์ฃผ์ด์ ธ ์์ ๋ ํ๋์ ์ฅ๋๊ฐ ์์ ํ์ ์กฐ๋ฆฝํ๊ธฐ ์ํ์ฌ ํ์ํ ๊ธฐ๋ณธ ๋ถํ์ ์ข ๋ฅ๋ณ ๊ฐ์๋ฅผ ๊ณ์ฐํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๐์ ๋ ฅ
์ฒซ์งธ ์ค์๋ ์์ฐ์ N(3 ≤ N ≤ 100)์ด ์ฃผ์ด์ง๋๋ฐ, 1๋ถํฐ N-1๊น์ง๋ ๊ธฐ๋ณธ ๋ถํ์ด๋ ์ค๊ฐ ๋ถํ์ ๋ฒํธ๋ฅผ ๋ํ๋ด๊ณ , N์ ์์ ํ์ ๋ฒํธ๋ฅผ ๋ํ๋ธ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ค์ ์ค์๋ ์์ฐ์ M(3 ≤ M ≤ 100)์ด ์ฃผ์ด์ง๊ณ , ๊ทธ ๋ค์ M๊ฐ์ ์ค์๋ ์ด๋ค ๋ถํ์ ์์ฑํ๋๋ฐ ํ์ํ ๋ถํ๋ค ๊ฐ์ ๊ด๊ณ๊ฐ 3๊ฐ์ ์์ฐ์ X, Y, K๋ก ์ฃผ์ด์ง๋ค. ์ด ๋ป์ "์ค๊ฐ ๋ถํ์ด๋ ์์ ํ X๋ฅผ ๋ง๋๋๋ฐ ์ค๊ฐ ๋ถํ ํน์ ๊ธฐ๋ณธ ๋ถํ Y๊ฐ K๊ฐ ํ์ํ๋ค"๋ ๋ป์ด๋ค. ๋ ์ค๊ฐ ๋ถํ์ด ์๋ก๋ฅผ ํ์๋ก ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
๐์ถ๋ ฅ
ํ๋์ ์์ ํ์ ์กฐ๋ฆฝํ๋๋ฐ ํ์ํ ๊ธฐ๋ณธ ๋ถํ์ ์๋ฅผ ํ ์ค์ ํ๋์ฉ ์ถ๋ ฅํ๋(์ค๊ฐ ๋ถํ์ ์ถ๋ ฅํ์ง ์์), ๋ฐ๋์ ๊ธฐ๋ณธ ๋ถํ์ ๋ฒํธ๊ฐ ์์ ๊ฒ๋ถํฐ ํฐ ์์๊ฐ ๋๋๋ก ํ๋ค. ๊ฐ ์ค์๋ ๊ธฐ๋ณธ ๋ถํ์ ๋ฒํธ์ ์์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
์ ๋ต์ 2,147,483,647 ์ดํ์ด๋ค.
๐ ๋ฌธ์ ํ์ด
์์ ์ ๋ ฌ์ ์ฌ์ฉํ์ฌ ๋ถํ๋ค์ ์์๋ฅผ ์ ๋ฆฌํ๋ค. ์ด๋ 2๋ฒ ๋ถํ์ ๋ง๋ค๊ธฐ ์ํด 1๋ฒ ๋ถํ์ด 4๊ฐ ํ์ํ๋ค๋ฉด ํ์ฌ ํ์ํ 2๋ฒ ๋ถํ ๊ฐฏ์ * 1๋ฒ ๋ถํ์ ํ์๊ฐ์(4) ๋ฅผ ํด์ค์ผ๋ก์จ ๊ฐ๊ฐ์ ๋ถํ์ ํ์ํ ๊ฐฏ์๋ฅผ ํ์ ํ ์ ์๋ค
๐ป ์ฝ๋
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | from collections import deque import sys input = sys.stdin.readline n = int(input()) m = int(input()) edges = [[] for _ in range(n+1)] need = [0]*(n+1) ans = [0]*(n+1) ans[n] = 1 for _ in range(m): x,y,k = map(int,input().split()) edges[x].append((y,k)) need[y] += 1 queue = deque([n]) origin = [i for i in range(1, n+1) if not edges[i]] while queue: cur = queue.popleft() for nxt,cnt in edges[cur]: need[nxt] -= 1 ans[nxt] += cnt*ans[cur] if not need[nxt]: queue.append(nxt) for i in origin: print(i, ans[i]) | cs |
๐ญ ์ํ์ฐฉ์ค
5๊ฐ์๋ง์ ๋ฆฌ๋ฒค์ง ์ฑ๊ณตํ ๋ฌธ์ ๋ค.
๐ ๋ฌธ์ ๋งํฌ
noj.am/2637
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 28457๋ฒ: Every? Only One's Marble - ํ์ด์ฌ (0) | 2023.08.13 |
---|---|
[๋ฐฑ์ค] 17132๋ฒ: ๋๋์ง๊ฐ ์ ๋ณด์ฌ์ ์ฌ๋ผ์จ ์ด์ - ํ์ด์ฌ (0) | 2023.08.06 |
[๋ฐฑ์ค] 17398๋ฒ: ํต์ ๋ง ๋ถํ (0) | 2023.07.02 |
[๋ฐฑ์ค] 18171: ABB (0) | 2023.05.15 |
[๋ฐฑ์ค] ๋ฐฑ์ค ๋๋ค ๋ํ์ค (0) | 2023.05.09 |