小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.\)

题解

看到题目中的三个条件,应该可以看出这是一道差分约束题了

首先抛开题目,如果一个式子满足

\[dis[j]>=dis[i]+w[i,j]
\]

应该可以想到最长路的三角不等式

对于一条边(u,v,w),我们认为v点的值需要至少比u点大w

所以对于1条件,可以简化为\(dis[a]>=dis[b]+c\),我们建一条由b到a的边,边权为c

对于2条件,\(dis[a]<=dis[b]+c\),转化为\(dis[b]>=dis[a]-c\),建一条由a到b的边,边权为-c

对于3条件,\(dis[a]=dis[b]\),建双向边(a,b),边权为0

其次,为了保证图联通,我们吧每个节点向0点建一条边权为0的边

所以数组就要开3倍!!!!!

然后跑最短路就可以了,SPFA判环,最长路判正环,最短路判负环,没什么要注意的了

Code

#include<bits/stdc++.h>
#define rg register
#define Min(a,b) (a)<(b)?(a):(b)
using namespace std;
const int N=10010,M=10010;
const int inf=2e9; int in(int &ans)
{
ans=0; int f=1; char i=getchar();
while(i<'0' || i>'9') {if(i=='-') f=-1; i=getchar();}
while(i>='0' && i<='9') ans=(ans<<1)+(ans<<3)+i-'0', i=getchar();
ans*=f;
} bool flag;
int cnt,n,m,T;
int to[M<<2],nex[M<<2],w[M<<2],head[N],dis[N],vis[N]; inline void add(int a,int b,int c)
{
to[++cnt]=b,nex[cnt]=head[a];
w[cnt]=c,head[a]=cnt;
} void SPFA(int u)
{
vis[u]=1;
for(int i=head[u];i;i=nex[i]) {
if(dis[to[i]]<dis[u]+w[i]) {
if(vis[to[i]]||flag) {flag=1;break;}
dis[to[i]]=dis[u]+w[i];
SPFA(to[i]);
}
}vis[u]=0;
} int main()
{
in(n),in(m);
for(int i=1;i<=m;i++) {
int op,a,b,c;
in(op);
switch(op){
case 1:in(a),in(b),in(c),add(b,a,c);break;
case 2:in(a),in(b),in(c),add(a,b,-c);break;
case 3:in(a),in(b),add(a,b,0),add(b,a,0);break;
}
}
for(int i=1;i<=n;i++) add(0,i,0);
for(int i=1;i<=n;i++) dis[i]=-inf;
SPFA(0); puts((!flag)?"Yes":"No");
return 0;
}

博主蒟蒻,随意转载.但必须附上原文链接

http://www.cnblogs.com/real-l/

小K的农场的更多相关文章

  1. 【BZOJ】3436: 小K的农场

    3436: 小K的农场 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 938  Solved: 417[Submit][Status][Discuss ...

  2. 2014.7.7 模拟赛【小K的农场】

    3.小K的农场(farm.pas/cpp/c) [题目描述] 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得一些含糊的信息(共m个),以下列三 ...

  3. 【BZOJ3436】小K的农场(差分约束)

    [BZOJ3436]小K的农场(差分约束) 题面 由于BZOJ巨慢无比,使用洛谷美滋滋 题解 傻逼差分约束题, 您要是不知道什么是差分约束 您就可以按下\(Ctrl+W\)了 #include< ...

  4. BZOJ_3436_小K的农场_差分约束

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

  5. P1993 小K的农场

    P1993 小K的农场比较裸的差分约束,只是我判负环的时候sb了... 有负环意味着无解 #include<iostream> #include<cstdio> #includ ...

  6. 洛谷 P1993 小K的农场 解题报告

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

  7. P1993 小K的农场 && 差分约束

    首先第一篇讨论的是差分约束系统解的存在 差分约束系统是有 \(n\) 个变量及 \(m\) 个(如 \(x_{i} - x_{j} \leq a_{k}\) )关系组成的系统 差分约束解的求解可以转化 ...

  8. BZOJ3436: 小K的农场(差分约束裸题&DFS优化判环)

    3436: 小K的农场 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2111  Solved: 986[Submit][Status][Discus ...

  9. 洛谷P1993 小K的农场 [差分约束系统]

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

  10. 【BZOJ3436】小K的农场 差分约束

    [BZOJ3436]小K的农场 Description 背景 小K是个特么喜欢玩MC的孩纸... 描述 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了, ...

随机推荐

  1. pyecharts的简单使用

    由于需要在项目中展示数据,查了查资料发现,pyecharts模块在网页数据展示方面有很大优势,所以就学了点pyechas 参考博客:Python:数据可视化pyecharts的使用 - JYRoy - ...

  2. java 获取图片大小(尺寸)

    1,获取本地图片大小(尺寸) File picture=new File(strSrc);BufferedImage sourceImg=ImageIO.read(new FileInputStrea ...

  3. [答网友问]让GridLength支持动画

    原文:[答网友问]让GridLength支持动画 [答网友问]WPF中让GridLength类型支持动画                                                 ...

  4. Linux下中文乱码问题

    记录一下配置centos的时候遇到的一些常见问题 写了一个python脚本,有中文注释,而且会输出一些用户名称,其中包含中文字符.显示的时候出现乱码. 解决方案: 参见博客: Linux基础:中文显示 ...

  5. java doc 编写

    总而言之,我觉得有用的是: @see 只要敲了@see 然后会自动写你的类名的,很方便.# 去连接字段 {@link } 只要敲了{@link } 然后会自动写你的类名的,很方便.# 去连接字段 如果 ...

  6. 【问题记录】Linux Python等交互式输入回退键出现 ^H^H

    执行:yum install readline readline-devel

  7. ubuntu apt-get 使用代理设置,坑爹。。

    网上流传的export http_proxy=http://yourproxyaddress:proxyport是行不通的,虽然改了之后wget一类的可以用.当然去改.bashrc也不会有效果. 真正 ...

  8. 对工具的反思 & deadlines与致歉

    人和动物最大的区别就是使用工具的水平. 有些人只凭着对工具的熟练掌握便成了牛人. 工具,到底应该以何种态度去看待? 在我小的时候,工具仅仅是指树枝.线.粉笔,可以让自己有更多游戏可玩:上学之后,便又有 ...

  9. jmeter添加自定义扩展函数之图片base64编码

    打开eclipse,新建maven工程,在pom中引入jmeter核心jar包: <!-- https://mvnrepository.com/artifact/org.apache.jmete ...

  10. virtualBox 安装 CentOs 6.8 以及网络配置

    安装 virtual box 基本设置: 1.创建虚拟电脑 类型:Linux 版本:Red Hat(64-bit) 这个64/32 和电脑具体配置关系. 然后就是路next or 设置常规的东西. 2 ...