import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
static int []건설시간;
static int []자식수;
static LinkedList<Integer> []건설순서;
static int [] result;
@SuppressWarnings("unchecked")
public static void main
(String[] args
) {
Scanner sc
= new Scanner
(System.
in); int T = sc.nextInt();
for(int i=0;i<T;i++) //테스트 케이스 반복
{
int N=sc.nextInt();
int K=sc.nextInt();
건설시간 = new int [N+1];
for(int x=1;x<N+1;x++)
건설시간[x]=sc.nextInt();
자식수 = new int [N+1];
result = new int [N+1];
for(int z=1;z<N+1;z++)
건설순서[z] = new LinkedList<Integer>();
for(int j=0;j<K;j++)
{
int c=sc.nextInt();
int p=sc.nextInt();
건설순서[c].add(p); //c를 지어야 p를 건설가능
자식수[p]++;
}
int W=sc.nextInt();
System.
out.
println(위상정렬
(N,K,W
));
}
}
public static int 위상정렬(int N,int K,int W) {
Queue<Integer> q = new LinkedList<>();
for(int i=1;i<N+1;i++) //먼저 자식이 없는 노드부터 큐에 삽입한다
{
if(자식수[i]==0)
{
q.offer(i);
result[i]=건설시간[i];
}
}
while(!q.isEmpty()) //큐가 빌때까지 반복
{
int x =q.poll();
for(int node : 건설순서[x]) //x 자식 node 부모
{
result
[node
] = Integer.
max(result
[node
],result
[x
]+건설시간
[node
]); 자식수[node]--;
if(자식수[node]==0)
{
q.offer(node);
}
}
}
return result[W];
}
}
aW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwppbXBvcnQgamF2YS51dGlsLlF1ZXVlOwppbXBvcnQgamF2YS51dGlsLlNjYW5uZXI7CgpwdWJsaWMgY2xhc3MgTWFpbiB7CglzdGF0aWMgaW50IFtd6rG07ISk7Iuc6rCEOwoJc3RhdGljIGludCBbXeyekOyLneyImDsKCXN0YXRpYyBMaW5rZWRMaXN0PEludGVnZXI+IFtd6rG07ISk7Iic7IScOwoJc3RhdGljIGludCBbXSByZXN1bHQ7CgkKCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewoJCgkJU2Nhbm5lciBzYyA9IG5ldyBTY2FubmVyKFN5c3RlbS5pbik7CgkJaW50IFQgPSBzYy5uZXh0SW50KCk7CgkJZm9yKGludCBpPTA7aTxUO2krKykgLy/thYzsiqTtirgg7LyA7J207IqkIOuwmOuztQoJCXsKCQkJaW50IE49c2MubmV4dEludCgpOwoJCQlpbnQgSz1zYy5uZXh0SW50KCk7CgkJCeqxtOyEpOyLnOqwhCA9IG5ldyBpbnQgW04rMV07CgkJCWZvcihpbnQgeD0xO3g8TisxO3grKykKCQkJCeqxtOyEpOyLnOqwhFt4XT1zYy5uZXh0SW50KCk7CgkJCeqxtOyEpOyInOyEnCA9IG5ldyBMaW5rZWRMaXN0W0srMV07IAoJCQnsnpDsi53siJggPSBuZXcgaW50IFtOKzFdOwoJCQkgcmVzdWx0ID0gbmV3IGludCBbTisxXTsKCQkJZm9yKGludCB6PTE7ejxOKzE7eisrKQoJCQkJ6rG07ISk7Iic7IScW3pdID0gbmV3IExpbmtlZExpc3Q8SW50ZWdlcj4oKTsKCQkJZm9yKGludCBqPTA7ajxLO2orKykKCQkJewoJCQkJaW50IGM9c2MubmV4dEludCgpOyAKCQkJCWludCBwPXNjLm5leHRJbnQoKTsgCgkJCQnqsbTshKTsiJzshJxbY10uYWRkKHApOyAgIC8vY+ulvCDsp4DslrTslbwgcOulvCDqsbTshKTqsIDriqUKCQkJCeyekOyLneyImFtwXSsrOwoJCQl9IAogCQkJaW50IFc9c2MubmV4dEludCgpOwkJCQoJCQkKIAkJCVN5c3RlbS5vdXQucHJpbnRsbijsnITsg4HsoJXroKwoTixLLFcpKTsKCQkJCgkJfQoJCQoJfQoJcHVibGljIHN0YXRpYyBpbnQg7JyE7IOB7KCV66CsKGludCBOLGludCBLLGludCBXKSB7CgkJUXVldWU8SW50ZWdlcj4gcSA9IG5ldyBMaW5rZWRMaXN0PD4oKTsJCgkJZm9yKGludCBpPTE7aTxOKzE7aSsrKSAvL+uovOyggCDsnpDsi53snbQg7JeG64qUIOuFuOuTnOu2gO2EsCDtgZDsl5Ag7IK97J6F7ZWc64ukCgkJeyAKCQkJaWYo7J6Q7Iud7IiYW2ldPT0wKQoJCQl7CgkJCQlxLm9mZmVyKGkpOwoJCQkJcmVzdWx0W2ldPeqxtOyEpOyLnOqwhFtpXTsKCQkJfQoJCX0KCQl3aGlsZSghcS5pc0VtcHR5KCkpIC8v7YGQ6rCAIOu5jOuVjOq5jOyngCDrsJjrs7UgCgkJewoJCQkKCQkJaW50IHggPXEucG9sbCgpOyAKCQkJZm9yKGludCBub2RlIDog6rG07ISk7Iic7IScW3hdKSAvL3gg7J6Q7IudICAgICAgICAgICAgIG5vZGUg67aA66qoCgkJCXsKCQkJCXJlc3VsdFtub2RlXSA9IEludGVnZXIubWF4KHJlc3VsdFtub2RlXSxyZXN1bHRbeF0r6rG07ISk7Iuc6rCEW25vZGVdKTsKCQkJCeyekOyLneyImFtub2RlXS0tOwoJCQkJaWYo7J6Q7Iud7IiYW25vZGVdPT0wKQoJCQkJewoJCQkJCXEub2ZmZXIobm9kZSk7CgkJCQl9CgkJCX0KCgkJfQoJCQoJCXJldHVybiByZXN1bHRbV107CgkKCQkKCX0KfQo=