by FadedAW @ 2018-08-14 16:34:42
```
#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;
}
```
by FadedAW @ 2018-08-14 16:35:06
巧了我也是
by wangyitong @ 2018-08-22 10:08:29