#include<bits/stdc++.h>
using namespace std;
int n,m,c,a[1000001],u,v,cnt,head[100001],dp[1005][1005],ans;
struct nood {
int nex,to;
}e[100001<<2];
inline void add(int u,int v) {
e[++cnt].nex=head[u];
head[u]=cnt;
e[cnt].to=v;
}
main(){
cin>>n>>m>>c;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=m;i++)cin>>u>>v,add(v,u);
memset(dp,-1,sizeof(dp));
dp[0][1]=0;
for(int i=1;i<=1000;i++)for(int j=1;j<=n;j++)for(int k=head[j];k;k=e[k].nex)if(~dp[i-1][e[k].to])dp[i][j]=max(dp[i][j],dp[i-1][e[k].to]+a[j]);
for(int i=1;i<=1000;i++)ans=max(ans,dp[i][1]-c*i*i);
cout<<ans;
}
为什么把
if(!dp[i-1][e[k].to])
换成
if(~dp[i-1][e[k].to])
就A了