找不出问题,求大佬帮忙看一下

P1993 小 K 的农场

@[Name1](/user/648660) ```cpp #include<iostream> #include<cstring> #include<queue> #include<cstdio> using namespace std; const int N=5e4+10; int n,m,cnt,head[N],nu,x,y,c,dis[N],num[N]; bool vis[N]; struct Edge{int next,to,w;}g[N]; void add(int u,int v,int w) { g[++cnt]=(Edge){head[u],v,w}; head[u]=cnt; } bool SPFA(int s) { queue<int> q; dis[s]=0;vis[s]=true;num[s]++; q.push(s); while(!q.empty()) { int u=q.front();q.pop();vis[u]=false; for(int i=head[u];i;i=g[i].next) { int x=g[i].to,w=g[i].w; if(dis[x]>dis[u]+w) { dis[x]=dis[u]+w; if(!vis[u]) { q.push(x); vis[x]=true; num[x]++; if(num[x]==n+1) return false; } } } } return true; } int main() { scanf("%d %d",&n,&m); memset(dis,0x3f3f3f3f,sizeof(dis)); for(int i=1;i<=m;i++) { scanf("%d",&nu); if(nu==1) { scanf("%d %d %d",&x,&y,&c); add(x,y,-c); } else if(nu==2) { scanf("%d %d %d",&x,&y,&c); add(y,x,c); } else { scanf("%d %d",&x,&y); add(x,y,0);add(y,x,0); } } for(int i=1;i<=n;i++) add(n+1,i,0); bool ty=SPFA(n+1); if(ty==true) puts("Yes"); else puts("No"); return 0; } ```
by yyandy @ 2022-04-07 20:15:23


SPFA 写错了,第 32 行是 vis[x] 不是 vis[u]
by yyandy @ 2022-04-07 20:16:14


@[yyandy](/user/234101) 谢谢大佬
by Name1 @ 2022-04-07 21:09:14


|