代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,s[10010],x,y,num[10010],maxs,sum;
vector<int> a[10010];
bool vis[10010];
queue<int> qt;
void bfs(int k){
sum=0;
qt.push(k);
vis[k]=1;
while(!qt.empty()){
int now=qt.front();
sum+=s[now];
for(int i=0;i<num[now];i++){
if(!vis[a[now][i]]){
vis[a[now][i]]=1;
qt.push(a[now][i]);
}
}
qt.pop();
}
maxs=max(maxs,sum);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",&s[i]);
while(m--){
scanf("%d%d",&x,&y);
a[x].push_back(y);
num[x]++;
}
for(int i=1;i<=n;i++){
if(!vis[i]) bfs(i);
}
printf("%d",maxs);
return 0;
}