2026-02-26 20:19:48 +09:00

55 lines
1.4 KiB
Java

import java.util.*;
public class _1005_2 {
static int N, K, W;
static int[] build_time, complete_time;
static int[][] prev_build;
static int build(int n) {
if(complete_time[n] == -1) {
int total_time = 0;
for(int i=1; i<=prev_build[n][0]; i++) {
int prev = prev_build[n][i];
total_time = Math.max(total_time, build(prev));
}
complete_time[n] = total_time + build_time[n];
}
return complete_time[n];
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
int[] ans = new int[T];
for(int t=0; t<T; t++) {
N = sc.nextInt();
K = sc.nextInt();
build_time = new int[N+1];
for(int i=1; i<=N; i++) {
build_time[i] = sc.nextInt();
}
prev_build = new int[N+1][N+1];
for(int i=0; i<K; i++) {
int X = sc.nextInt(), Y = sc.nextInt();
prev_build[Y][++prev_build[Y][0]] = X;
}
complete_time = new int[N+1];
for(int i=1; i<=N; i++) complete_time[i] = -1;
W = sc.nextInt();
ans[t] = build(W);
}
sc.close();
for (int n : ans) {
System.out.println(n);
}
}
}