Post

🐒 μž‘μ—…

1. 문제 링크

2056번: μž‘μ—…


2. μ½”λ“œ

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
"""
[2056] μž‘μ—…

πŸ’› 문제
μˆ˜ν–‰ν•΄μ•Ό ν•  μž‘μ—… 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)κ°€ 주어진닀.
    그리고 μ„ ν–‰ 관계에 μžˆλŠ” μž‘μ—…λ“€μ˜ λ²ˆν˜Έκ°€ 주어진닀.

πŸ’™ 좜λ ₯
첫째 쀄에 λͺ¨λ“  μž‘μ—…μ„ μ™„λ£Œν•˜κΈ° μœ„ν•œ μ΅œμ†Œ μ‹œκ°„μ„ 좜λ ₯ν•œλ‹€.
"""

n = int(input())

# ν•΄λ‹Ή λ…Έλ“œμ—μ„œ κ±Έλ¦¬λŠ” μ‹œκ°„
times = [0] * (n+1)
graph = {}

for i in range(1, n+1):
    works = list(map(int, input().split()))
    times[i] = works[0]

    if works[1] == 0:
        continue

    for j in works[2:]:
        if i in graph:
            graph[i].append(j)
        else:
            graph[i] = [j]

for i in range(1, n+1):
    if i in graph:
        time = 0
        for j in graph[i]:
            # ν•΄λ‹Ή μž‘μ—…μ— ν•„μš”ν•œ μ„ ν–‰ μž‘μ—…λ“€μ˜ max μ‹œκ°„μ„ λ”ν•œλ‹€
            time = max(time, times[j])
        times[i] += time

print(max(times))


3. ν•΄μ„€

  • ν•΄λ‹Ή λ…Έλ“œμ—μ„œ μˆ˜ν–‰ν•˜λŠ” μ΅œμ’… μ‹œκ°„μ„ λ³€μˆ˜μ— λ„£λŠ”λ‹€
  • λͺ¨λ“  μž‘μ—…μ„ λŒλ©΄μ„œ λ¨Όμ € ν•΄μ•Όν•  μž‘μ—…λ“€μ˜ λΉ„μš©μ˜ μ΅œλŒ€κ°’μ„ λˆ„μ ν•΄μ„œ κ΅¬ν•œλ‹€
This post is licensed under CC BY 4.0 by the author.