#include<bits/stdc++.h>
using namespace std;
namespace CCF_NB{
#define ll long long
#define ss stable_sort
#define inf INT_MAX
#define umap unordered_map
#define uset unordered_set
inline void read(string &str){char s=getchar();while(s==' '||s=='\n'||s=='\r'){s=getchar();}while(s!=' '&&s!='\n'&&s!='\r'){str+=s;s=getchar();}}
inline void read(char &_c){_c=getchar();while(_c==' '||_c=='\n'||_c=='\r') _c=getchar();}
inline void read(double &_d){scanf("%lf",&_d);}
inline void write(string _str){printf("%s",_str.c_str());}
inline void write(char _c){putchar(_c);}
inline void write(double _d){printf("%f",_d);}
template <typename T> inline void read(T& x){x=0;T f=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+(ch^48),ch=getchar();x=x*f;return;}
template <typename T,typename ...Arg>inline void read(T& x,Arg& ...arg){read(x);read(arg...);}
template <typename T>inline void write(T x){if(x<0)putchar('-'),x=-x;if(x<10)putchar(x+'0');else write(x/10),putchar(x%10+'0');}
template <typename T,typename ...Arg>inline void write(T x,Arg ...arg){write(x);write(arg...);}
template <typename T>inline T max(T x,T y){return (x>y)?x:y;}
template <typename T,typename ...Arg>inline T max(T x,Arg ...arg){return max(x,max(arg...));}
template <typename T>inline T min(T x,T y){return (x<y)?x:y;}
template <typename T,typename ...Arg>inline T min(T x,Arg ...arg){return min(x,min(arg...));}
#define max CCF_NB::max
#define min CCF_NB::min
template <typename T>inline T _get(){T _____;read(_____);return _____;}
template <typename T>inline T gcd(T x,T y){return __gcd(x,y);}
template <typename T,typename ...Arg>inline T gcd(T x,Arg ...arg){return gcd(x,gcd(arg...));}
}
using namespace CCF_NB;
int n,m,t[10005],B[10005],ans=0;
vector <int> v[10005];
bool b[10005];
int sum(int k){
int cnt;
if(b[k]) return t[k];
for(int i=0;i<v[k].size();i++){
cnt=max(sum(v[k][i]),cnt);
}
b[k]=1;
t[k]=cnt+t[k];
return t[k];
}
int main(){
read(n,m);
for(int i=1;i<=n;i++){
read(t[i]);
}
while(m--){
int x,y;
read(x,y);
v[x].push_back(y);
}
for(int i=1;i<=n;i++){
ans=max(ans,sum(i));
// write(ans,'\n');
}
write(ans);
return 0;
}
中间的一句调试语句,如果不注释结果就是对的(至少我测的几组小数据是对的),但一注释掉就有问题,就好像在玩我一样,搞得我连程序都调不成,求助