为什么加上注释的那句话就不能ac
注释的那句话在dfs里是low[y]=u;
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10;
int n,m,cnt,dfn[N],low[N],in[N],st[N],top,a[N],dis[N],sd[N];
vector<int>vec[N],ne[N];
bool stk[N];
void dfs(int u,int d){
dfn[u]=low[u]=++cnt;
st[++top]=u;
stk[u]=1;
for(auto v:vec[u]){
if(!dfn[v]){
dfs(v,u);
low[u]=min(low[u],low[v]);
}else if(stk[v]){
low[u]=min(low[u],dfn[v]);
}
}
if(dfn[u]==low[u]){
int y;
while(y=st[top--]){
//low[y]=u;
sd[y]=u;
stk[y]=0;
if(u==y)return;
a[u]+=a[y];
}
}
}
int redfs(){
queue<int>q;
for(int i=1;i<=n;i++){
if(sd[i]==i && in[i]==0){
q.push(i);
dis[i]=a[i];
}
}
int ans=0;
while(!q.empty()){
int k=q.front();
q.pop();
for(auto v:ne[k]){
dis[v]=max(dis[v],dis[k]+a[v]);
in[v]--;
if(in[v]==0)q.push(v);
}
}
for(int i=1;i<=n;i++)ans=max(ans,dis[i]);
return ans;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
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;
vec[u].push_back(v);
}
for(int i=1;i<=n;i++){
if(!dfn[i]){
dfs(i,i);
}
}
for(int u=1;u<=n;u++){
for(auto v:vec[u]){
if(sd[u]!=sd[v]){
ne[sd[u]].push_back(sd[v]);
in[sd[v]]++;
}
}
}
cout<<redfs();
return 0;
}