P1993 小K的农场 (差分约束)

题目描述

小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得一些含糊的信息(共m个),以下列三种形式描述:

  • 农场a比农场b至少多种植了c个单位的作物,
  • 农场a比农场b至多多种植了c个单位的作物,
  • 农场a与农场b种植的作物数一样多。

但是,由于小K的记忆有些偏差,所以他想要知道存不存在一种情况,使得农场的种植作物数量与他记忆中的所有信息吻合。

输入输出格式

输入格式:

 

第一行包括两个整数 n 和 m,分别表示农场数目和小 K 记忆中的信息数目。

接下来 m 行:

如果每行的第一个数是 1,接下来有 3 个整数 a,b,c,表示农场 a 比农场 b 至少多种植

了 c 个单位的作物。

如果每行的第一个数是 2,接下来有 3 个整数 a,b,c,表示农场 a 比农场 b 至多多种植

了 c 个单位的作物。如果每行的第一个数是 3,家下来有 2 个整数 a,b,表示农场 a 终止的

数量和 b 一样多。

 

输出格式:

如果存在某种情况与小 K 的记忆吻合,输出“Yes”,否则输出“No”。

 

输入输出样例

输入样例#1: 
3 3
3 1 2
1 1 3 1
2 2 3 2
输出样例#1: 
Yes

说明

对于 100% 的数据保证:1 ≤ n,m,a,b,c ≤ 10000。

 

Solution

  图论题思路还是比较简单的.

  看到这题莫名想到白皮上的食物链那道题...

  试想一下,如果说有一种情况不存在,那么肯定是与之前有冲突.

  所以想到大概方向:

    我们只要判断是否有语句是假的即可.

  然后想一想食物链那道题?

  那道用的是并查集,那么在这里很显然行不通.于是想到建一个有权图

 

  关于这个图,我们可以这样建:

   1) 对于至少的,我们采用负边.因为:a>=b+c 可以写成: b-a<=-c

      2) 对于至多的,我们采用正边.同理.

      3) 对于相等的,我们直接加一条权值为0的边即可. 

 

    然后再SPFA判断负环即可.

      关于为什么是判断负环,也很好推其实.

      因为如果是不满足的情况即是对于一个点对

      已经满足a大于b 但是又有另外一组关系使得b大于a .

      那么我们就会冲突,此时即为不满足.

      

 

代码

  

#include<bits/stdc++.h>
using namespace std;
const int maxn=100008;
struct sj 
{int to;int next;int w;
}a[maxn*2];
int size,head[maxn*2],dis[maxn*2];
int vis[maxn*2],pd,n,m;
void add(int x,int y,int z)
{a[++size].to=y;a[size].w=z;a[size].next=head[x];head[x]=size;
}
void spfa(int x)
{vis[x]=1;for(int i=head[x];i;i=a[i].next){int to=a[i].to;if(dis[to]>dis[x]+a[i].w){if(pd||vis[to]) {pd=1;break;}dis[to]=dis[x]+a[i].w;spfa(to);}}vis[x]=0;
}
int main()
{cin>>n>>m;    for(int i=1;i<=m;i++){int p,x,y,z;scanf("%d",&p);if(p==1)scanf("%d%d%d",&x,&y,&z),add(x,y,-z);if(p==2)scanf("%d%d%d",&x,&y,&z),add(y,x,z);if(p==3)scanf("%d%d",&x,&y),add(x,y,0),add(y,x,0);}memset(dis,0x7f,sizeof(dis));for(int i=1;i<=n;i++){dis[i]=0;spfa(i);}if(pd) {cout<<"No";return 0;}cout<<"Yes";return 0;
}

 

转载于:https://www.cnblogs.com/Kv-Stalin/p/9093732.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353615.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将Quartz与Spring集成

在Java应用程序中调度作业时&#xff0c;Quartz是第一个考虑的工具。 Quartz是由最流行的RDBMS支持的作业调度程序。 这真的很方便&#xff0c;并且很容易与spring集成。 为了创建石英模式&#xff0c;您必须下载石英发行版并解压缩位于crystal-2.2.3 / docs / dbTables /中的…

linux下md5sum的使用

在linux或Unix上&#xff0c;md5sum是用来计算和校验文件报文摘要的工具程序。一般来说&#xff0c;安装了Linux后&#xff0c;就会有md5sum这个工具&#xff0c;直接在命令行终端直接运行。1、使用md5sum来产生指纹&#xff08;报文摘要&#xff09;命令如下&#xff1a;md5su…

深入理解Python中的元类(metaclass)

注&#xff1a;本文原稿来自stackoverflow&#xff0c;原文链接&#xff0c;目前已收获5k高赞。 一、类也是对象 在理解元类之前&#xff0c;你需要先掌握Python中的类。Python中类的概念借鉴于Smalltalk&#xff0c;这显得有些奇特。在大多数编程语言中&#xff0c;类就是一组…

6个步骤卸载wine

今天在ubuntu下装了个wine&#xff0c;感觉界面很难看&#xff0c;跟ubuntu风格不协调。所以我把它卸载了。 根据网上找的资料&#xff0c;我是按如下步骤卸载&#xff1a; 1.终端运行sudo apt-get remove wine&#xff0c;运行发现系统还有wine的图标残留&#xff0c;于是 2…

OpenStack基础知识-virtualenv工具详解

1、virtualenv介绍 virtualenv通过创建一个单独的虚拟化python运行环境&#xff0c;将我们所需的依赖安装进去&#xff0c;不同项目之间相互不干扰&#xff0c;从而解决不同的项目之间依赖不同&#xff0c;造成的冲突问题 2、安装virtualenv 通过pip命令&#xff0c;安装virtua…

java中的五种排序方法_用Java排序的五种有用方法

java中的五种排序方法Java排序快速概述&#xff1a; 正常的列表&#xff1a; private static List VEGETABLES Arrays.asList("apple", "cocumbers", "blackberry");Collections.sort(VEGETABLES);output: apple, blackberry, cocumbers反向排…

压缩vmware中的ubuntu系统(虚拟机瘦身大法)

压缩vmware中的ubuntu系统&#xff08;虚拟机瘦身大法&#xff09; 前提:你的虚拟机大小 < 你放置虚拟机的磁盘的剩余空间 1.在Termial(终端)里 运行"sudo vmware-toolbox"(需要root权限) 2.选择“shrink”选项卡 3.选中“/”&#xff0c;点击“shrink”按钮 4.完…

P2619 [国家集训队2]Tree I

P2619 [国家集训队2]Tree I 链接 分析&#xff1a; 为了确定白边选入的数量&#xff0c;所以给白边加一个权值&#xff0c;二分这个值&#xff0c;然后最小生成树。可以发现白边的数量虽这个值的增大而减小&#xff0c;满足单调性。 有一个问题&#xff1a;如果在二分过程中给白…

程序化JCMD访问

在线提出的问题表明&#xff0c;开发人员偶尔希望通过其Java应用程序访问通常从针对该应用程序外部运行JConsole &#xff0c; VisualVM或JDK命令行工具获得的信息类型。 以下是这类问题的一些示例&#xff1a; 如何以编程方式获取jmap直方图&#xff1f; 以编程方式从Java应…

Ubuntu瘦身与扩容运动

Ubuntu瘦身与扩容运动 2009-11-26 18:18:24| 分类&#xff1a; 计算机 | 标签&#xff1a; |字号大中小 订阅 Ubuntu瘦身与扩容运动 2009年08月14日 星期五 12:25大家都知道系统用久了就会慢慢变得臃肿,速度当然也就会有一些影响,所以当那些加速系统的方法不在奏效的时候…

认识jQuery

一、JavaScript库 把一些浏览器兼容性的代码或者需要常用的函数装在一个js文件里,封装了很多js代码的一个js文件就是一个库 二、jQuery 是一个JavaScript库&#xff0c;免费开源的&#xff0c;体积小&#xff0c;链式编程&#xff0c;隐式迭代&#xff0c;很多优点jQuery 的功能…

Axis2 WebService(配置、发布、调用)

from:http://www.lifeba.org/arch/java_axis2_webservice.html 准备工作 1、下载&#xff1a;axis2-1.5.4-bin.zip,axis2-1.5.4-war.zip 下载地址&#xff1a;http://axis.apache.org/axis2/java/core/ 2、环境变量设置 AXIS2_HOME E:\research\axis2-1.5.4-bin\axis2-1.5.4 J…

SmartPDA图片

转载于:https://www.cnblogs.com/xyyshishuaige/p/9098613.html

基于国家标准的 EndNote 输出样式模板

发表于 2013-05-26作者 Haoxian Zeng浏览 983 次from:http://cnzhx.net/blog/endnote-output-style-cnzhx/1EndNote 相当于一个数据库&#xff0c;将添加/导入的文献存档。需要引用文献的时候就从中选择一个插入到文档中&#xff0c;EndNote 会自动给你编号、在文档末尾建立相应…

工厂设计模式解决什么问题_使用工厂模式解决设计问题

工厂设计模式解决什么问题工厂设计模式是面向对象环境中最常用的模式之一。 再次来自“创意设计”模式类别&#xff0c;即有关对象创建的所有信息。 在某些情况下&#xff0c;对象的创建很复杂&#xff0c;可能需要某种程度的抽象&#xff0c;以便客户端代码不了解这些复杂性和…

shiro 认证思路

转载于:https://www.cnblogs.com/hwgok/p/9101232.html

Java 9对可选的补充

哇&#xff0c;人们对Java 9的Stream API增添了 真正的兴趣。 想要更多&#xff1f; 让我们看一下…… 可选的 可选::流 这不需要任何解释&#xff1a; Stream<T> stream();想到的第一个词是&#xff1a; 终于 &#xff01; 最后&#xff0c;我们可以轻松地从可选值流…

Matlab功率谱估计

(2012-03-16 12:22:15) 随机信号处理 * 随机变量分布特征量 均值mean 协方差矩阵cov 相关系数矩阵corrcoef [R, P] corrcoef(X)&#xff0c;P值用于检验相关性&#xff0c;越小越相关&#xff0c;0.05以下为显著相关。 * 相关函数估计 相关函数估计xcorr [c,lags] xcorr(…

OO第三次博客作业——规格

OO第三次博客作业——规格 一、调研结果&#xff1a; 规格的历史&#xff1a; 引自博文链接&#xff1a;http://blog.sina.com.cn/s/blog_473d5bba010001x9.html 传统科学的特点是发现世界&#xff0c;而软件的特点是构造世界。软件的最底层就是0&#xff0c;1&#xff0c;两个…

EndNote使用技巧之一--参考文献的导入

2012-11-20 11:54:15| 分类&#xff1a; 学术相关 | 标签&#xff1a; |字号大中小 订阅 一、怎样给课题组的其他人员共享我的library? 打开要共享的libirary→点击file→send to→compressed lirary→在 Send to Compressed Library 窗口确认储存路径与文件名&#xf…