[๋ฐฑ์ค€] 1005 ACMCraft (python ํŒŒ์ด์ฌ)

2022. 6. 10. 02:46ยท๐Ÿงฉ Problem Solving/[๋ฐฑ์ค€]

https://www.acmicpc.net/problem/1005

 

1005๋ฒˆ: ACM Craft

์ฒซ์งธ ์ค„์—๋Š” ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฃผ์–ด์ง„๋‹ค. ์ฒซ์งธ ์ค„์— ๊ฑด๋ฌผ์˜ ๊ฐœ์ˆ˜ N๊ณผ ๊ฑด๋ฌผ๊ฐ„์˜ ๊ฑด์„ค์ˆœ์„œ ๊ทœ์น™์˜ ์ด ๊ฐœ์ˆ˜ K์ด ์ฃผ์–ด์ง„๋‹ค. (๊ฑด๋ฌผ์˜ ๋ฒˆํ˜ธ๋Š” 1๋ฒˆ๋ถ€

www.acmicpc.net

 

ํ’€์ด ๊ณผ์ •

์ฒ˜์Œ์— for ๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ํ’€์—ˆ๋‹ค. ์˜ˆ์ œ ๊ธฐ์ค€์œผ๋กœ 1 2 3 4์ฒ˜๋Ÿผ ์ˆœ์„œ๋Œ€๋กœ์ธ ๊ฒฝ์šฐ๋Š” ์ •๋‹ต์ด ๋งž์ง€๋งŒ.

3 -> 2 -> 1๊ณผ ๊ฐ™์ด ์ˆœ์„œ๊ฐ€ ๊ฑฐ๊พธ๋กœ์ธ ๊ฒฝ์šฐ ๋‹ต์ด ํ‹€๋ฆฌ๊ฒŒ ๋‚˜์˜จ๋‹ค.

์ˆœ์„œ๋ฅผ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋Œ€๋กœ ์ •ํ•˜๋ฉด ํ•ด๊ฒฐ์ด ๋  ๊ฑฐ ๊ฐ™์•„ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด๋˜ ๋„์ค‘ ์œ„์ƒ ์ •๋ ฌ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค.

 

ํ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ธ ๊ฒƒ๋“ค์„ ๊ทธ๋ž˜ํ”„์—์„œ popํ•ด์ฃผ๋ฉฐ ์ •๋ ฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

์œ„ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด node 1 ~ 4๊นŒ์ง€ ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ ๊ฐ๊ฐ 0 1 1 2์ด๋‹ค. ์ด๋Ÿฌ๋ฉด ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ธ node 1์„ ํ์— ๋„ฃ๊ณ  node 2, 3์˜ ์ง„์ž… ์ฐจ์ˆ˜๋ฅผ 1 ๊ฐ์†Œ ์‹œ์ผœ ์ฃผ๋ฉด ๋œ๋‹ค. ์ดํ›„ ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ด ๋œ node 2, 3์„ ํ์— ๋„ฃ๋Š”๋‹ค. ์ด ๋™์ž‘์„ ๋ฐ˜๋ณตํ•˜๋ฉด ์œ„์ƒ ์ •๋ ฌ์„ ํ•œ๋‹ค. 

 

node 4์™€ ๊ฐ™์ด ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 2 ์ด์ƒ์ธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ node 4์˜ ๊ฑด์„ค ์™„๋ฃŒ ์‹œ๊ฐ„์„ ๊ณ„์‚ฐ ํ• ๋•Œ node 2์™€ 3๊ฐ€ ๊ฑด์„ค๋  ๋•Œ๊นŒ์ง€ ์‹œ๊ฐ„ ์ค‘ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ๋”ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

 

from collections import deque
import sys

input = sys.stdin.readline
T = int(input().rstrip())

for _ in range(T):
    N, K = map(int,input().rstrip().split())

    D = [0]
    D.extend([int(x) for x in input().rstrip().split()]) # n๋ฒˆ์งธ ๊ฑด๋ฌผ ๊ฑด์„ค ์‹œ๊ฐ„
    in_degree = [0 for _ in range(N + 1)] # n๋ฒˆ์งธ node ์ง„์ž… ์ฐจ์ˆ˜
    adj_list_out = [[] for i in range(N + 1)] # n๋ฒˆ์งธ ๋…ธ๋“œ์—์„œ out์ธ ๋…ธ๋“œ ์ €์žฅ
    adj_list_in = [[] for i in range(N + 1)]  # n๋ฒˆ์งธ ๋…ธ๋“œ์—์„œ in์ธ ๋…ธ๋“œ ์ €์žฅ
    deq = deque()
    toposort = []
    Dtime = [0 for i in range(N + 1)] # n๋ฒˆ์งธ ๊ฑด์„ค๊นŒ์ง€ ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„

    for i in range(K):
        x, y = map(int,input().rstrip().split())
        adj_list_out[x].append(y)
        adj_list_in[y].append(x)
        in_degree[y] += 1
    W = int(input())

 

 ์ฃผ์–ด์ง„ ์ž…๋ ฅ๊ฐ’๋“ค์„ ์ œ์™ธ ํ•˜๊ณ  ์„ค๋ช…ํ•˜๋ฉด ์œ„์ƒ ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•ด in_dgree์™€ adj_list_out ๋ฆฌ์ŠคํŠธ๋ฅผ ์„ ์–ธํ•ด์ค€๋‹ค.

์ •๋ ฌ๋œ ๊ฐ’๋“ค์€ toposort ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•ด์ค€๋‹ค. Dtime์€ n๋ฒˆ์งธ ๊ฑด๋ฌผ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์ €์žฅํ•ด์ค€๋‹ค.

 

 

    for i in range(1,N + 1):
        if in_degree[i] == 0:
            deq.append(i)

    while deq:
        node = deq.popleft()
        toposort.append(node)
        for s in adj_list_out[node]:
            in_degree[s] -= 1
            if in_degree[s] == 0:
                deq.append(s)

์ด ํŒŒํŠธ๋Š” ์œ„์ƒ ์ •๋ ฌ์„ ์œ„ํ•œ ์ฝ”๋“œ๋‹ค. ๊ฐ€์žฅ ๋จผ์ € ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ธ ๊ฐ’๋“ค์„ ํ์— ๋„ฃ์–ด์ค€๋‹ค.

์ดํ›„ ํ๊ฐ€ ์™„์ „ํžˆ ๋น„์›Œ์งˆ๋•Œ๊นŒ์ง€ node๋“ค์„ ํ•˜๋‚˜์”ฉ pop ํ•˜๋ฉด์„œ ํ•ด๋‹น ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋‹ค๋ฅธ ๋…ธ๋“œ๋“ค์˜ indegree๊ฐ’๋“ค์„ ๊ฐ์†Œ์‹œ์ผœ์ค€๋‹ค.

๊ฐ์†Œ์‹œํ‚จ ์ด ํ›„ ๊ทธ ๋…ธ๋“œ์˜ ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ด ๋˜๋ฉด ํ์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

 

 

    for i in toposort:
        count = 0
        for b in adj_list_in[i]:
            if count < Dtime[b]:
                count = Dtime[b]
        Dtime[i] = D[i] + count

    print(Dtime[W])

์ •๋ ฌ๋œ ์ˆœ์„œ์— ๋”ฐ๋ผ ๊ฑด๋ฌผ๋“ค์ด ์ง€์–ด์ง€๋Š” ์‹œ๊ฐ„์„ ๊ณ„์‚ฐํ•˜๋ฉด ๋œ๋‹ค. node i์— ๋Œ€ํ•ด i์ „๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„๋“ค ์ค‘ ์ตœ๋Œ“๊ฐ’์„ 

D [i]์— ๋”ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ์ดํ›„ ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•œ ๊ฑด๋ฌผ์˜ ๊ฑด์„ค ์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

์ „์ฒด ์ฝ”๋“œ

from collections import deque
import sys

input = sys.stdin.readline
T = int(input().rstrip())

for _ in range(T):
    N, K = map(int,input().rstrip().split())

    D = [0]
    D.extend([int(x) for x in input().rstrip().split()]) # n๋ฒˆ์งธ ๊ฑด๋ฌผ ๊ฑด์„ค ์‹œ๊ฐ„
    in_degree = [0 for _ in range(N + 1)] # n๋ฒˆ์งธ node ์ง„์ž… ์ฐจ์ˆ˜
    adj_list_out = [[] for i in range(N + 1)] # n๋ฒˆ์งธ ๋…ธ๋“œ์—์„œ out์ธ ๋…ธ๋“œ ์ €์žฅ
    adj_list_in = [[] for i in range(N + 1)]  # n๋ฒˆ์งธ ๋…ธ๋“œ์—์„œ in์ธ ๋…ธ๋“œ ์ €์žฅ
    deq = deque()
    toposort = []
    Dtime = [0 for i in range(N + 1)] # n๋ฒˆ์งธ ๊ฑด์„ค๊นŒ์ง€ ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„

    for i in range(K):
        x, y = map(int,input().rstrip().split())
        adj_list_out[x].append(y)
        adj_list_in[y].append(x)
        in_degree[y] += 1
    W = int(input())

    for i in range(1,N + 1):
        if in_degree[i] == 0:
            deq.append(i)

    while deq:
        node = deq.popleft()
        toposort.append(node)
        for s in adj_list_out[node]:
            in_degree[s] -= 1
            if in_degree[s] == 0:
                deq.append(s)

    for i in toposort:
        count = 0
        for b in adj_list_in[i]:
            if count < Dtime[b]:
                count = Dtime[b]
        Dtime[i] = D[i] + count

    print(Dtime[W])

 

์ถ”๊ฐ€)

    for i in range(1,N + 1):
        if in_degree[i] == 0:
            deq.append(i)
            Dtime[i] = D[i] #

    while deq:
        node = deq.popleft()
        toposort.append(node)
        for s in adj_list_out[node]:
            in_degree[s] -= 1
            Dtime[s] = max(Dtime[s],Dtime[node] + D[s]) #
            if in_degree[s] == 0:
                deq.append(s)

while๋ฌธ์—์„œ DP๋ฅผ ์ด์šฉํ•ด ํ•ด๊ฒฐํ•˜๋ฉด ์ข€ ๋” ํšจ์œจ์ ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ๋ฅผ ๋บ„ ๋•Œ๋งˆ๋‹ค ์ด์ „ Dtime๊ฐ’์ด๋ž‘ ์ด์ „ ๊ฑด๋ฌผ๊นŒ์ง€ ๊ฑด์„คํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„ + ์ด๋ฒˆ ๊ฑด๋ฌผ ์ง“๋Š” ์‹œ๊ฐ„์„ ๋น„๊ตํ•˜์—ฌ ํฐ ๊ฐ’์„ ์ €์žฅํ•ด์ค€๋‹ค.

ํฐ๊ฐ’์„ ๊ตฌํ•˜๋Š” ์ด์œ ๋Š” ๊ฑด๋ฌผ์„ ์ง“๊ธฐ ์œ„ํ•ด์„  ์ด์ „ ๊ฑด๋ฌผ๋“ค์„ ์ „๋ถ€ ์ง€์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์„ ํƒํ•˜์—ฌ ์ €์žฅํ•œ๋‹ค.

'๐Ÿงฉ Problem Solving > [๋ฐฑ์ค€]' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฐฑ์ค€] 2252 ์ค„์„ธ์šฐ๊ธฐ (python ํŒŒ์ด์ฌ)  (0) 2022.06.11
[๋ฐฑ์ค€] 11718 ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅํ•˜๊ธฐ (python ํŒŒ์ด์ฌ)  (0) 2022.06.10
[๋ฐฑ์ค€] 14499 ์ฃผ์‚ฌ์œ„ ๊ตด๋ฆฌ๊ธฐ(python ํŒŒ์ด์ฌ)  (0) 2022.06.09
[๋ฐฑ์ค€] 7576 ํ† ๋งˆํ†  (python ํŒŒ์ด์ฌ)  (0) 2022.06.08
[๋ฐฑ์ค€] 14503 ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ (python ํŒŒ์ด์ฌ)  (0) 2022.05.23
'๐Ÿงฉ Problem Solving/[๋ฐฑ์ค€]' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [๋ฐฑ์ค€] 2252 ์ค„์„ธ์šฐ๊ธฐ (python ํŒŒ์ด์ฌ)
  • [๋ฐฑ์ค€] 11718 ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅํ•˜๊ธฐ (python ํŒŒ์ด์ฌ)
  • [๋ฐฑ์ค€] 14499 ์ฃผ์‚ฌ์œ„ ๊ตด๋ฆฌ๊ธฐ(python ํŒŒ์ด์ฌ)
  • [๋ฐฑ์ค€] 7576 ํ† ๋งˆํ†  (python ํŒŒ์ด์ฌ)
์ œ๋ด‰์•„
์ œ๋ด‰์•„
  • ์ œ๋ด‰์•„
    Overthinking
    ์ œ๋ด‰์•„
    fake it till you make it.
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (104)
      • ๐Ÿงฉ Problem Solving (83)
        • [๋ฐฑ์ค€] (74)
        • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] (7)
        • [SW Expert Academy] (1)
        • [์•Œ๊ณ ๋ฆฌ์ฆ˜ for PS] (1)
      • ๐Ÿ“ฆ Data Structure (2)
      • ๐Ÿ“œ Language (14)
        • [python] (14)
      • ๐Ÿ–ค Git (1)
      • ๐ŸŒ† ์ผ์ƒ (2)
        • ๐Ÿ’ฌ ๋ฒฝ๋ณด๊ณ  ๋งํ•˜๊ธฐ (2)
      • ๐Ÿ—„๏ธ ๊ธฐํƒ€ (2)
      • ๐Ÿ”ต css (0)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    SWEA
    ๋ธŒ๋ฃจํŠธํฌ์Šค
    ํŒŒ์ด์ฌ
    ๋ถ€๋ถ„ํ•ฉ
    Bruteforce
    ํ”Œ๋กœ์ด๋“œ์›Œ์…œ
    ๊ตฌํ˜„
    slicing
    ๋ฐฑํŠธ๋ž˜ํ‚น
    boj
    imos
    ์ •์ฒ˜๊ธฐ
    BFS
    ๋ˆ„์ ํ•ฉ
    ํŒฐ๋ฆฐ๋“œ๋กฌ
    ์œ„์ƒ์ •๋ ฌ
    ๋ฐ๋ธŒ์ฝ”์Šค
    ์žฌ๊ท€
    ํˆฌํฌ์ธํ„ฐ
    ๋ƒ…์ƒ‰
    ๋ฐฑ์ค€
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    ๋‹ค์ต์ŠคํŠธ๋ผ
    ๊ทธ๋ฆฌ๋””
    DFS
    DP
    Python
    ๋ถ„ํ•  ์ •๋ณต
    ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ
    ์Šคํƒ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
์ œ๋ด‰์•„
[๋ฐฑ์ค€] 1005 ACMCraft (python ํŒŒ์ด์ฌ)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”