55 lines
1.4 KiB
Java
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);
|
|
}
|
|
}
|
|
} |