样例都过了,自己出了几个测试点也过了,但提交WA了6个
#include<bits/stdc++.h>
using namespace std;
long long n,m;
long long T[50005];
struct Edge{
long long v,next;
}edge[50005];
long long head[50005],ans[50005],cnt,ce,degree[50005],vis[50005];
inline void adde(long long u,long long v){
edge[++ce].v=v;
edge[ce].next=head[u];
head[u]=ce;
degree[v]++;
vis[u]=vis[v]=1;
}
stack<long long> s;
long long answer,sum[50005];
inline void topsort(){
long long p,q;
for(long long i=1;i<=n;i++)
if(!degree[i]&&vis[i]){
s.push(i);
sum[i]=T[i];
while(!s.empty()){
long long u=s.top();
s.pop();
ans[++cnt]=u;
for(long long i=head[u];i;i=edge[i].next){
long long v=edge[i].v;
sum[v]=sum[u]+T[v];
answer=max(sum[v],answer);
if(!(--degree[v])) s.push(v);
}
}
}
return;
}
int main(){
cin>>n>>m;
for(long long i=1;i<=n;i++){
cin>>T[i];
}
for(long long u,v,i=1;i<=m;i++){
cin>>u>>v;
adde(u,v);
}
topsort();
long long maxt=-1;
for(long long i=1;i<=n;i++) if(!vis[i]) maxt=max(maxt,T[i]);
cout<<max(answer,maxt)<<endl;
return 0;
}