社区讨论

求助,为什么第一个点wa了

P1993小 K 的农场参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mi6vw5nt
此快照首次捕获于
2025/11/20 11:40
4 个月前
此快照最后确认于
2025/11/20 11:40
4 个月前
查看原帖
求助,为什么第一个点wa了``` #include<bits/stdc++.h> using namespace std; const int N=50000+5; int n,m,d[10000+5],cnt[10000+5]; int head[N],ver[N],edge[N],Next[N],tot; bool v[10000+5],flag=false; void add(int x,int y,int z){ tot++;edge[tot]=z;ver[tot]=y;Next[tot]=head[x];head[x]=tot; } void spfa(int x){ v[x]=true; for(int i=head[x];i;i=Next[i]){ int y=ver[i],z=edge[i]; if(d[y]>d[x]+z){ if(v[y]){ flag=true; return ; } d[y]=d[x]+z; spfa(y); } } } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=m;i++){ int bi;scanf("%d",&bi); if(bi==1){ int x,y,z; scanf("%d%d%d",&x,&y,&z); add(x,y,-z);// x-y>=z } else if(bi==2){ int x,y,z; scanf("%d%d%d",&x,&y,&z); add(y,x,z);//x-y<=z } else { int x,y; scanf("%d%d",&x,&y); add(x,y,0);add(y,x,0); } } for(int i=1;i<=n;i++){ d[i]=0; spfa(i); if(flag)break; } if(flag==true)printf("No\n"); else printf("Yes\n"); return 0; }
CPP

回复

3 条回复,欢迎继续交流。

正在加载回复...