[BOJ][๐ก5][๋ฐฑ์ค#02056] ์์
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold V
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
์ํํด์ผ ํ ์์ N๊ฐ (3 โคย N โคย 10000)๊ฐ ์๋ค. ๊ฐ๊ฐ์ ์์ ๋ง๋ค ๊ฑธ๋ฆฌ๋ ์๊ฐ(1 โคย ์๊ฐ โค 100)์ด ์ ์๋ก ์ฃผ์ด์ง๋ค. ๋ช๋ช ์์ ๋ค ์ฌ์ด์๋ ์ ํ ๊ด๊ณ๋ผ๋ ๊ฒ ์์ด์, ์ด๋ค ์์ ์ ์ํํ๊ธฐ ์ํด ๋ฐ๋์ ๋จผ์ ์๋ฃ๋์ด์ผ ํ ์์ ๋ค์ด ์๋ค. ์ด ์์ ๋ค์ ๋ฒํธ๊ฐ ์์ฃผ ์์๊ฒ ๋งค๊ฒจ์ ธ ์์ด์, K๋ฒ ์์ ์ ๋ํด ์ ํ ๊ด๊ณ์ ์๋(์ฆ, K๋ฒ ์์ ์ ์์ํ๊ธฐ ์ ์ ๋ฐ๋์ ๋จผ์ ์๋ฃ๋์ด์ผ ํ๋) ์์ ๋ค์ ๋ฒํธ๋ ๋ชจ๋ 1 ์ด์ (K-1) ์ดํ์ด๋ค. ์์ ๋ค ์ค์๋, ๊ทธ๊ฒ์ ๋ํด ์ ํ ๊ด๊ณ์ ์๋ ์์ ์ด ํ๋๋ ์๋ ์์ ์ด ๋ฐ๋์ ํ๋ ์ด์ ์กด์ฌํ๋ค. (1๋ฒ ์์ ์ด ํญ์ ๊ทธ๋ฌํ๋ค) ๋ชจ๋ ์์ ์ ์๋ฃํ๊ธฐ ์ํด ํ์ํ ์ต์ ์๊ฐ์ ๊ตฌํ์ฌ๋ผ. ๋ฌผ๋ก , ์๋ก ์ ํ ๊ด๊ณ๊ฐ ์๋ ์์ ๋ค์ ๋์์ ์ํ ๊ฐ๋ฅํ๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N์ด ์ฃผ์ด์ง๋ค. ๋ ๋ฒ์งธ ์ค๋ถํฐ N+1๋ฒ์งธ ์ค๊น์ง N๊ฐ์ ์ค์ด ์ฃผ์ด์ง๋ค. 2๋ฒ์งธ ์ค์ 1๋ฒ ์์ , 3๋ฒ์งธ ์ค์ 2๋ฒ ์์ , โฆ, N+1๋ฒ์งธ ์ค์ N๋ฒ ์์ ์ ๊ฐ๊ฐ ๋ํ๋ธ๋ค. ๊ฐ ์ค์ ์ฒ์์๋, ํด๋น ์์ ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ๋จผ์ ์ฃผ์ด์ง๊ณ , ๊ทธ ๋ค์์ ๊ทธ ์์ ์ ๋ํด ์ ํ ๊ด๊ณ์ ์๋ ์์ ๋ค์ ๊ฐ์(0 โคย ๊ฐ์ โค 100)๊ฐ ์ฃผ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ์ ํ ๊ด๊ณ์ ์๋ ์์ ๋ค์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋ชจ๋ ์์ ์ ์๋ฃํ๊ธฐ ์ํ ์ต์ ์๊ฐ์ ์ถ๋ ฅํ๋ค.
์์
์ ๋ ฅ
7
5 0
1 1 1
3 1 2
6 1 1
1 2 2 4
8 2 2 4
4 3 3 5 6
์ถ๋ ฅ
23
My Sol
def calc_time(n):
global time, dp, first
if dp[n]: return dp[n]
if not first[n]:
dp[n] = time[n]
return dp[n]
maxx = 0
while first[n]:
nn = first[n].pop()
ret = calc_time(nn)
if maxx < ret:
maxx = ret
dp[n] = time[n] + maxx
return dp[n]
N = int(input())
dp = [0]*(N+1)
time = [0]*(N+1)
first = [set() for _ in range(N+1)]
for i in range(1, N+1):
t, n, *arr = map(int, input().split())
time[i] = t
first[i] = set(arr)
for i in range(1, N+1):
dp[i] = calc_time(i)
print(max(dp))
DP๋ฅผ ์ฌ์ฉํ๋ ๋ฌธ์ ์๋ค. ์ฌ๋ฌ ๋ฒ ๊ณ์ฐ๋์ด์ผ ํ๋ ์์ ์ ๋ฉ๋ชจ์ด์ ์ด์ ํ์ฌ ์ฌ์ฉํ๋ ๋ฐฉ์์ด๋ค.
- ๋ฉ๋ชจ์ด์ ์ด์ ์ผ๋ก ๊ธฐ๋กํ๋ DP ๋ฐฐ์ด์ 0์ผ๋ก ์ด๊ธฐํํ๋ค.
- ์ ๋ ฅ์ ์ฒ๋ฆฌํ๋ค.
- ๋ง์ฝ dp ๋ฐฐ์ด์ ํน์ ์ธ๋ฑ์ค๊ฐ ๊ฐ์ด ์ถ๊ฐ๋๋ค๋ฉด ์ด๋ฏธ ํด๋น ์ธ๋ฑ์ค๊น์ง์ ์์ ์ ์ ํ ์์ ์ ๋ง์น ๋ค์ ์ต์ ์๊ฐ์ ์๋ฏธํ๋ค.
- ์ ํ ์์ ์ ๋ชจ๋ dp ๋ฐฐ์ด์ ์ฑ์ฐ๋ ๋ฐฉ์์ผ๋ก ์ ํ ์์ ์ ์๊ฐ๋ค์ ๊ฐ์ ธ์จ ๋ค, ์ ํ์์ ๋ค์ ์์ ์๊ฐ์ ์ต๋๊ฐ๊ณผ ํ์ฌ ์๊ฐ์ ๋ํ ๊ฐ์ ํ์ฌ ์ธ๋ฑ์ค์ dp์ ์ ์ฅํ๋ค.
- ์ด๋ฅผ ๋ฐ๋ณตํ๋ฉฐ ๋ชจ๋ dp ๋ฐฐ์ด์ ์ฑ์ด๋ค.
- dp ๋ฐฐ์ด์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ