2025-12-24 20:06:10 +09:00

58 lines
1.1 KiB
C

#include <stdio.h>
#include <stdlib.h>
int dp[1001];
int build_info[1001][1001];
int build_time[1001];
int T, N, K, W;
int max(int a, int b) {
return a > b ? a : b;
}
int solve(int target);
int main() {
scanf("%d", &T);
int* ans = (int*)malloc(sizeof(int)*T);
for(int t=0; t<T; t++) {
scanf("%d %d",&N, &K);
for(int i=1; i<=N; i++) {
scanf("%d",&build_time[i]);
build_info[i][0] = 0;
dp[i] = -1;
}
for(int i=0; i<K; i++) {
int u, v;
scanf("%d %d",&u, &v);
build_info[v][++build_info[v][0]] = u;
}
scanf("%d", &W);
ans[t] = solve(W);
}
for(int t=0; t<T; t++) printf("%d\n", ans[t]);
free(ans);
return 0;
}
int solve(int target) {
if(dp[target] == -1) {
int max_built_time = 0;
for(int i=1; i<=build_info[target][0]; i++) {
int prev = build_info[target][i];
max_built_time = max(max_built_time, solve(prev));
}
dp[target] = max_built_time + build_time[target];
}
return dp[target];
}