90pts求助

P2136 拉近距离

```cpp #include<bits/stdc++.h> #define ll long long #define inf (0x3f3f3f3f) using namespace std; const int N=4e3+10; const int M=5e4+10; int n,m,tot,cnt[N],ans=inf;bool vis[N]; int pre[M],now[M],to[M],val[M],dis[N]; void add(int x,int y,int z){ pre[++tot]=now[x]; to[tot]=y;val[tot]=z; now[x]=tot; } void spfa(int st){ queue<int>q; memset(dis,0x3f,sizeof(dis)); memset(cnt,0,sizeof(cnt)); q.push(st);vis[st]=1;dis[st]=0; while(!q.empty()){ int u=q.front();q.pop();vis[u]=0; if(cnt[u]>=n){puts("Forever love");exit(0);} for(int i=now[u],v=to[i];i;i=pre[i],v=to[i]) if(dis[u]+val[i]<dis[v]){ dis[v]=dis[u]+val[i]; if(!vis[v]){vis[v]=1,q.push(v),cnt[v]++;} } } } int main(){ scanf("%d%d",&n,&m); for(int i=1,u,v,l;i<=m;i++){ scanf("%d%d%d",&u,&v,&l); add(u,v,-l); } spfa(1);ans=min(dis[n],ans); spfa(n);ans=min(dis[1],ans); printf("%d",ans); return 0; } ``` for循环里的v没有更新
by donkeys @ 2021-07-15 09:25:01


|