题目大意

n个点 m条描述

  1. 农场 a 比农场 b 至少多种植了 c 个单位的作物。

  2. 农场 a 比农场 b 至多多种植了 c 个单位的作物。

  3. 农场 a 与农场 b 种植的作物数一样多。

题解

差分约束裸题

可以把m条描述转换成一张图

ai-bi≥c--->bi-ai≤-c ai向bi连边权值为-c

ai-bi≤c    bi向ai连边 权值为c

ai-bi≥0并且ai-bi≤0所以ai和bi之间连双向边....

开始我不明白为什么要虚拟一个0点...原来图可能不连通....

判断负环...要用spfa的dfs判断 效率更高

代码

#include<iostream>
#include<cstring>
#include<cstdio>
#define mmx 100003
using namespace std; int n,m,a,b,c,od,flag,sumedge;
int dis[mmx],vis[mmx],head[mmx]; inline int read(){
register char ch=getchar();register int x=,f=;
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&& ch<=''){x=x*+ch-'';ch=getchar();}
return f*x;
} struct Edge{
int x,y,z,nxt;
Edge(int x=,int y=,int z=,int nxt=):
x(x),y(y),z(z),nxt(nxt){}
}edge[mmx<<]; inline void add(int x,int y,int z){
edge[++sumedge]=Edge(x,y,z,head[x]);
head[x]=sumedge;
} inline void spfa(int now){
vis[now]=;
for(int i=head[now];i;i=edge[i].nxt){
int v=edge[i].y ;
if(dis[v]>dis[now]+edge[i].z){
dis[v]=dis[now]+edge[i].z;
if(vis[v]){flag=;return;}
spfa(v);
}
}
vis[now]=;
} int main(){
n=read();m=read();
for(register int i=;i<=m;i++){
od=read();a=read();b=read();
if(od==){c=read();add(a,b,-*c);}
if(od==){c=read();add(b,a,c);}
if(od==){add(a,b,);add(b,a,);}
}
for(register int i=;i<=n;i++)add(,i,);
memset(dis,/,sizeof(dis));
dis[]=;spfa();
if(flag)printf("No\n");
else printf("Yes\n");
return ;
}

最新文章

  1. Kotlin的Lambda表达式以及它们怎样简化Android开发(KAD 07)
  2. 使用ICSharpCode.SharpZipLib.Zip类库解压zip文件的方法
  3. Java异常体系及分类
  4. 【python】确保文件写入结束
  5. 使用WKWebView遇到的坑
  6. 解决IE9下JQuery的ajax失效的问题
  7. [转帖] Symbol Emotions Sticker 英文符号表情大全
  8. Android面试题基础(转)
  9. Android获取SharedPreferences失败,且App无法启动
  10. [light oj 1013] Love Calculator
  11. .net core3
  12. 实例讲解js正则表达式的使用
  13. 移动端H5制作安卓和IOS的坑 持续更新...
  14. MySQL对sum()字段 进行条件筛选,使用having,不能用where
  15. 冲刺NO.6
  16. js简单实现自动轮播
  17. asp.net引用System.Speech实现语音提示
  18. setDefaultKeyMode设置Activity的五种按键模式
  19. Selenium Web 自动化
  20. react-native 打包apk

热门文章

  1. CodeChef - LEMOVIE Little Elephant and Movies
  2. Codeforces 961 D Pair Of Lines
  3. spark与Scala安装过程和步骤及sparkshell命令的使用
  4. 6.JAVA语言基础部分--数据库操作
  5. jquery 实现鼠标点击div盒子移动功能
  6. Android应用开发 WebView与服务器端的Js交互
  7. JNI之—— Eclipse配置C/C++开发环境
  8. sort-list——链表、快慢指针找中间、归并排序
  9. TinyXML:属性
  10. MVC 基于FormsAuthentication 方式的权限验证