-
[๋ฐฑ์ค] 2637 ์ฅ๋๊ฐ ์กฐ๋ฆฝ with PythonPS 2022. 6. 1. 00:37728x90๋ฐ์ํ
๐ BOJ 2637 ์ฅ๋๊ฐ ์กฐ๋ฆฝ
๐ก ์กฐ๊ฑด
- ์ฐ๋ฆฌ๋ ์ด๋ค ์ฅ๋๊ฐ์ ์ฌ๋ฌ ๊ฐ์ง ๋ถํ์ผ๋ก ์กฐ๋ฆฝํ์ฌ ๋ง๋ค๋ ค๊ณ ํ๋ค.
์ด ์ฅ๋๊ฐ์ ๋ง๋๋๋ฐ๋ ๊ธฐ๋ณธ ๋ถํ๊ณผ ๊ทธ ๊ธฐ๋ณธ ๋ถํ์ผ๋ก ์กฐ๋ฆฝํ์ฌ ๋ง๋ ์ค๊ฐ ๋ถํ์ด ์ฌ์ฉ๋๋ค.
- ๊ธฐ๋ณธ ๋ถํ์ ๋ค๋ฅธ ๋ถํ์ ์ฌ์ฉํ์ฌ ์กฐ๋ฆฝ๋ ์ ์๋ ๋ถํ์ด๋ค. ์ค๊ฐ ๋ถํ์ ๋ ๋ค๋ฅธ ์ค๊ฐ ๋ถํ์ด๋ ๊ธฐ๋ณธ ๋ถํ์ ์ด์ฉํ์ฌ ๋ง๋ค์ด์ง๋ ๋ถํ์ด๋ค.
- ์ด๋ค ์ฅ๋๊ฐ ์์ ํ๊ณผ ๊ทธ์ ํ์ํ ๋ถํ๋ค ์ฌ์ด์ ๊ด๊ณ๊ฐ ์ฃผ์ด์ ธ ์์ ๋ ํ๋์ ์ฅ๋๊ฐ ์์ ํ์ ์กฐ๋ฆฝํ๊ธฐ ์ํด
ํ์ํ ๊ธฐ๋ณธ ๋ถํ์ ์ข ๋ฅ๋ณ ๊ฐ์๋ฅผ ๊ณ์ฐํ๋ ๋ฌธ์ .
- ์์ฐ์ N(3 โค N โค 100), 1๋ถํฐ N-1๊น์ง๋ ๊ธฐ๋ณธ ๋ถํ์ด๋ ์ค๊ฐ ๋ถํ์ ๋ฒํธ๋ฅผ ๋ํ๋ด๊ณ , N์ ์์ ํ์ ๋ฒํธ๋ฅผ ๋ํ๋ธ๋ค.
- ์์ฐ์ M(3 โค M โค 100)์ด ์ฃผ์ด์ง๊ณ , ๊ทธ ๋ค์ M๊ฐ์ ์ค์๋ ์ด๋ค ๋ถํ์ ์์ฑํ๋๋ฐ ํ์ํ ๋ถํ๋ค ๊ฐ์ ๊ด๊ณ๊ฐ 3๊ฐ์ ์์ฐ์ X, Y, K๋ก ์ฃผ์ด์ง๋ค.
"์ค๊ฐ ๋ถํ์ด๋ ์์ ํ X๋ฅผ ๋ง๋๋๋ฐ ์ค๊ฐ ๋ถํ ํน์ ๊ธฐ๋ณธ ๋ถํ Y๊ฐ K๊ฐ ํ์ํ๋ค"๋ ๋ป
- ํ๋์ ์์ ํ์ ์กฐ๋ฆฝํ๋๋ฐ ํ์ํ ๊ธฐ๋ณธ ๋ถํ์ ์๋ฅผ ํ ์ค์ ํ๋์ฉ ์ถ๋ ฅํ๋(์ค๊ฐ ๋ถํ์ ์ถ๋ ฅํ์ง ์์)
๋ฐ๋์ ๊ธฐ๋ณธ ๋ถํ์ ๋ฒํธ๊ฐ ์์ ๊ฒ๋ถํฐ ํฐ ์์๊ฐ ๋๋๋ก ํ๋ค. ๊ฐ ์ค์๋ ๊ธฐ๋ณธ ๋ถํ์ ๋ฒํธ์ ์์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
์ ๋ต์ 2,147,483,647 ์ดํ์ด๋ค.
- ์์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ ํ์ ๋ฌธ์
๐ฅ ์์ค ์ฝ๋
import sys from collections import deque input = sys.stdin.readline n = int(input()) connect = [[] for _ in range(n + 1)] needs = [[0] * (n + 1) for _ in range(n + 1)] q = deque() degree = [0] * (n + 1) for _ in range(int(input())): a, b, c = map(int, input().split()) connect[b].append((a, c)) degree[a] += 1 for i in range(1, n + 1): if degree[i] == 0: q.append(i) while q: now = q.popleft() for next, next_need in connect[now]: if needs[now].count(0) == n + 1: needs[next][now] += next_need else: for i in range(1, n + 1): needs[next][i] += needs[now][i] * next_need degree[next] -= 1 if degree[next] == 0: q.append(next) for x in enumerate(needs[n]): if x[1] > 0: print(*x)
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์
7 8 5 1 2 5 2 2 7 5 2 6 5 2 6 3 3 6 4 4 7 6 3 7 4 5
์คํ๊ฒฐ๊ณผ
1 16 2 16 3 9 4 17
โจ๏ธ ๋ฌธ์ ํ์ด
๋ฌธ์ ์์ ๊ฐ์ฅ ์ค์ํ ๋ฌธ์ฅ์ ๋จผ์ ์ดํด๋ณด๊ฒ ๋ค.
์ฅ๋๊ฐ์ ๋ง๋๋๋ฐ๋ ๊ธฐ๋ณธ ๋ถํ๊ณผ ๊ทธ ๊ธฐ๋ณธ ๋ถํ์ผ๋ก ์กฐ๋ฆฝํ์ฌ ๋ง๋ ์ค๊ฐ ๋ถํ์ด ์ฌ์ฉ๋๋ค. ๊ธฐ๋ณธ ๋ถํ์ ๋ค๋ฅธ ๋ถํ์ ์ฌ์ฉํ์ฌ ์กฐ๋ฆฝ๋ ์ ์๋ ๋ถํ์ด๋ค. ์ค๊ฐ ๋ถํ์ ๋ ๋ค๋ฅธ ์ค๊ฐ ๋ถํ์ด๋ ๊ธฐ๋ณธ ๋ถํ์ ์ด์ฉํ์ฌ ๋ง๋ค์ด์ง๋ ๋ถํ์ด๋ค.
์์ฝํ์๋ฉด, ์ค๊ฐ ๋ถํ๊ณผ ๊ธฐ๋ณธ ๋ถํ์ ํ์ ๊ฐ์ ์ด์ ๋ง๋ค์ด๋์ด์ผ ์์ ํ์ ๋ง๋ค ์ ์์ผ๋ฉฐ,
์ค๊ฐ ๋ถํ์ ๊ธฐ๋ณธ ๋ถํ์ ์กฐ๋ฆฝํ์ฌ ๋ง๋ค ์ ์๋ค. ์ด๋ ๋ฐ๋์ ๊ธฐ๋ณธ ๋ถํ์ ์ผ๋ก ์ค๊ฐ ์ ํ์ ๋จผ์ ๋ง๋ค์ด์ผ ์์ ํ์
๋ง๋ค ์ ์๋ค๋ ๊ฒ ์ด๋ค.
- ์์ ์ ๋ ฌ์ ์์๊ฐ ์๋ ์์
์ ์ฐจ๋ก๋๋ก ์ํํด์ผํ ๋ ๊ทธ ์์๋ฅผ ๊ฒฐ์ ํด์ฃผ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
๊ฐ ์ค๊ฐ ๋ถํ์ด ๋ง๋ค์ด์ง๊ธฐ ์ํด์๋ ๋ช ๊ฐ์ ๊ธฐ๋ณธ ๋ถํ์ด ๋ฐ๋์ ์์ด์ผํ๊ธฐ ๋๋ฌธ์ ์์์ ๋ ฌ์ ํตํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค๋ ์๊ฐ์ ํ ์ ์๋ค.
- ํ์ํ ๊ฐ์๋ฅผ needs ๋ฆฌ์คํธ์ ์ ์ฅํ๊ณ , needs[n] ์์ ๊ฐ ๋ถํ์ ๊ฐ์๋ฅผ ๋ฒํธ ์์๋๋ก ์ถ๋ ฅํ ๊ฒ์ด๋ค.
- connect ๋ฆฌ์คํธ์๋ X ๋ฅผ ๋ง๋ค๊ธฐ ์ํ Y๋ฒ ๋ถํ K ๊ฐ์ ๋ํด ์ ์ฅํ๋ค.
๐พ ๋ฐฐ์ด์
- ์์ ์ ๋ ฌ์ ๊ฐ๋ ์ ๋ฆฌ๋ฅผ ํตํด ๋ฌธ์ ์ ์ปจ์ ์ ์ดํดํจ.
- ์์๊ฐ ์๋ ์์
์ ์ฐจ๋ก๋๋ก ์ํํ๊ฑฐ๋, ๋ฐ๋์ ์ ์ ์กฐ๊ฑด์ด ๋ง์กฑ๋์ด์ผํ ๋๋ฅผ ์ ํ์
ํ์ฌ ์๊ฐํ๊ณ
๊ทธ ๋ก์ง์ ๊ตฌํํ๋ ์ฐ์ต์ ํ ์ ์์๋ ๋ฌธ์ ์๋ค. ํ์ง๋ง ๋์ด๋๋ ์๋นํ ๊ฒ ๊ฐ๋ค.
- ์๊พธ ๊น๋จน๋ ์์ ์ ๋ ฌ๊ฐ์ ๋ฌธ์ ๋ ์ฝ๋ฉํ ์คํธ ํ๋ฐ ๋ฒํธ๋ก ๋ฑ์ฅํ ๊ฐ๋ฅ์ฑ์ด ์์ ๊ฒ ๊ฐ๋ค.
๋ฐ์ํ'PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 6010 Music Notes with Python (0) 2022.06.03 [๋ฐฑ์ค] 3151 ํฉ์ด 0 with Python (0) 2022.06.01 [๋ฐฑ์ค] 2342 Dance Dance Revolution with Python (0) 2022.05.20 [๋ฐฑ์ค] 18291 ๋น์๋จ์ ์ง๊ฒ๋ค๋ฆฌ ๊ฑด๋๊ธฐ with Python (0) 2022.05.20 [๋ฐฑ์ค] 17204 ์ฃฝ์์ ๊ฒ์ with Python (0) 2022.05.19 - ์ฐ๋ฆฌ๋ ์ด๋ค ์ฅ๋๊ฐ์ ์ฌ๋ฌ ๊ฐ์ง ๋ถํ์ผ๋ก ์กฐ๋ฆฝํ์ฌ ๋ง๋ค๋ ค๊ณ ํ๋ค.