社区讨论
求助,为什么第一个点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 条回复,欢迎继续交流。
正在加载回复...