破案了,SPFA应该是这样的:
```cpp
void SPFA(long long begin){
if(la)return;
for(long long i=1;i<=n;i++){
dist[i]=9e18;
}
memset(report,false,sizeof(report));
memset(vis,0,sizeof(vis));
dist[begin]=0;
vis[begin]=0;
queue<long long>q;
q.push(begin);
vis[begin]=1;
while(!q.empty()){
long long d=q.front();
q.pop();
report[d]=false;
if(n<=vis[d]){
printf("-1\n");
la=true;
return;
}
for(long long i=0;i<e[d].size();i++){
if(vis[e[d][i].end]==0||dist[d]+e[d][i].len<dist[e[d][i].end]){
vis[e[d][i].end]++;
dist[e[d][i].end]=dist[d]+e[d][i].len;
if(report[e[d][i].end]==false)q.push(e[d][i].end);
report[e[d][i].end]=true;
}
}
}
return;
}
```
by Nuclear_Pasta @ 2022-09-20 19:57:57