728x90
728x90
이거 하다가 몇날며칠을 고민했는지 모른다..
머리로는 그림이 그려지는데, 구현을 하려니까 너무너무너무 어려워서 결국 도움을 받았다.
검색을 해 보니까 위상정렬 문제라고 하는데,
위상정렬이라는 것을 처음 들었다..
이러니 절대 풀 수가 없지
무엇인가 혼자 해 보려고 했는데 안되서 좌절감을 느끼고 있었는데
애초에 몰랐던 거니까.. 이제 알게되어서 다행이라고 생각했다.
언제쯤 능숙하게 이것 저것 모두 구현할 수 있는 능력을 가지게 될까.
정렬 문제는 여러가지로 공부 해 봐야겠다.
from sys import stdin
from collections import deque
input=stdin.readline
T=int(input())
for _ in range(T):
N,K=map(int,input().split())
dl=[0]+list(map(int,input().split())) #건물 올리는 시간
bl=[[] for _ in range(N+1)] #건물규칙
inDegree=[0 for _ in range(N+1)] #진입차수
dp=[0 for _ in range(N+1)]
for i in range(K): #건물 규칙 입력
a,b=map(int,input().split())
bl[a].append(b)
inDegree[b]+=1
q=deque()
for i in range(1,N+1):
if inDegree[i]==0:
q.append(i)
dp[i]=dl[i]
while q:
a=q.popleft()
for i in bl[a]:
inDegree[i]-=1
dp[i]=max(dp[a]+dl[i],dp[i])
if inDegree[i]==0:
q.append(i)
answer=int(input())
print(dp[answer])
728x90
'Baekjoon Case' 카테고리의 다른 글
[파이썬 / 백준 1934번] 최소공배수(유클리드 호제법) (0) | 2021.10.15 |
---|---|
[파이썬 / 백준 1006번] 다리놓기 (0) | 2021.10.07 |
[파이썬 / 백준 12865번] 평범한 배낭 (0) | 2021.09.25 |
[파이썬 / 백준 11727번] 2xn 타일링 2 (0) | 2021.09.17 |
[파이썬 / 백준 2193번] 이친수 (0) | 2021.09.17 |