
#include<bits/stdc++.h>
using namespace std;
vector<int> G[100010],G2[100010],ys[100010];
int dfn[100010],low[100010],stk[1000010],res[100010];
int t;
int scn,top;
int a[10000010];
bool instk[10000010];
int sum[10000010];
void dfs(int u){
t++;
dfn[u] = low[u] = t;
stk[top++] = u;
instk[u] = 1;
for(int i = 0;i < G[u].size();i++){
int v = G[u][i];
if(dfn[v]){
if(instk[v])low[u] = min(low[u],dfn[v]);
continue;
}
dfs(v);
low[u] = min(low[u],low[v]);
}
if(low[u] == dfn[u]){
scn++;
res[u] = scn;
while(1){
int v = stk[--top];
sum[scn] += a[v];
instk[v] = 0;
res[v] = scn;
ys[scn].push_back(v);
if(u == v)break;
}
}
}
bool se[10000010];
void build(){
for(int i = 1;i <= scn;i++){
for(int j = 0;j < ys[i].size();j++){
int v = ys[i][j];
for(int k = 0;k < G[v].size();k++){
int vis = G[v][k];
if(!se[res[vis]]&&res[vis]!=i){
se[res[vis]] = 1;
G2[i].push_back(res[vis]);
}
}
}
}
}
int s;
void gets(int u,int p){
s+=sum[u];
for(int i = 0;i < G2[u].size();i++){
int v = G2[u][i];
if(v == p)continue;
gets(v,u);
}
return;
}
int main(){
int n,m;
cin>>n>>m;
for(int i = 1;i <= n;i++){
cin>>a[i];
}
for(int i = 1;i <= m;i++){
int u,v;
cin>>u>>v;
G[u].push_back(v);
}
for(int i = 1;i <= n;i++){
if(!dfn[i])dfs(i);
}
build();
int q;
cin>>q;
for(int i = 1;i <= q;i++){
int u;
cin>>u;
u = res[u];
s = 0;
gets(u,-1);
cout<<s<<endl;
}
return 0;
}
大红大紫
结果MLE,WA,RE都有