洛谷P1993 小K的农场(差分约束)
【题目描述】
小K在MC里面建立很多很多的农场,总共 n n n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得一些含糊的信息(共 m m m个),以下列三种形式描述:
- 农场 a a a比农场 b b b至少多种植了 c c c个单位的作物;
- 农场 a a a比农场 b b b至多多种植了 c c c个单位的作物;
- 农场 a a a与农场 b b b种植的作物数一样多。
但是,由于小K的记忆有些偏差,所以他想要知道存不存在一种情况,使得农场的种植作物数量与他记忆中的所有信息吻合。
【输入格式】
第一行包括两个整数 n n n和 m m m,分别表示农场数目和小K记忆中的信息数目。
接下来 m m m行:
- 如果每行的第一个数是 1 1 1,接下来有三个整数 a , b , c a,b,c a,b,c,表示农场 a a a比农场 b b b至少多种植了 c c c个单位的作物;
- 如果每行的第一个数是 2 2 2,接下来有三个整数 a , b , c a,b,c a,b,c,表示农场 a a a比农场 b b b至多多种植了 c c c个单位的作物;
- 如果每行的第一个数是 3 3 3,接下来有两个整数 a , b a,b a,b,表示农场 a a a种植的的数量和 b b b一样多。
【输出格式】
如果存在某种情况与小K的记忆吻合,输出Yes
,否则输出No
。
【数据范围】
1 ≤ n , m , a , b , c ≤ 5 × 1 0 3 1 \le n,m,a,b,c \le 5 \times 10^3 1≤n,m,a,b,c≤5×103
【输入样例】
3 3
3 1 2
1 1 3 1
2 2 3 2
【输出样例】
Yes
【分析】
将题目所给的三种情况用以下不等式表示:
- a − b ≥ c ⟺ a ≥ b + c a-b\ge c\iff a\ge b+c a−b≥c⟺a≥b+c,即 a d d ( b , a , c ) add(b,a,c) add(b,a,c)
- a − b ≤ c ⟺ b ≥ a − c a-b\le c\iff b\ge a-c a−b≤c⟺b≥a−c,即 a d d ( a , b , − c ) add(a,b,-c) add(a,b,−c)
- a = b ⟺ a ≥ b , b ≥ a a=b\iff a\ge b,b\ge a a=b⟺a≥b,b≥a,即 a d d ( a , b , 0 ) , a d d ( b , a , 0 ) add(a,b,0),add(b,a,0) add(a,b,0),add(b,a,0)
每个农场的作物不会为负数个,即 x i ≥ 0 x_i\ge 0 xi≥0。我们建立虚拟源点 x 0 = 0 x_0=0 x0=0,则 x i ≥ x 0 + 0 x_i\ge x_0+0 xi≥x0+0,即 a d d ( 0 , x i , 0 ) add(0,x_i,0) add(0,xi,0)。而且观察到虚拟源点可以走到其它任意一点,因此满足差分约束条件,对于本题,我们只需要判断是否存在正环即可。
【代码】
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;const int N = 5010, M = 15010;
int e[M], ne[M], d[M], h[N], idx;
int dis[N], cnt[N];
bool st[N];
int n, m;void add(int u, int v, int w)
{e[idx] = v, d[idx] = w, ne[idx] = h[u], h[u] = idx++;
}bool spfa(int s)
{memset(dis, 0x8f, sizeof dis);queue<int> Q;Q.push(s);dis[s] = 0;st[s] = true;while (Q.size()){int t = Q.front();Q.pop();st[t] = false;for (int i = h[t]; ~i; i = ne[i])if (dis[t] + d[i] > dis[e[i]]){dis[e[i]] = dis[t] + d[i];cnt[e[i]] = cnt[t] + 1;if (cnt[e[i]] >= n + 1) return true;//存在正环if (!st[e[i]]) Q.push(e[i]), st[e[i]] = true;}}return false;
}int main()
{cin >> n >> m;memset(h, -1, sizeof h);for (int i = 1; i <= n; i++) add(0, i, 0);//i >= 0 -> x0 + 0 <= iwhile (m--){int op, a, b, c;cin >> op >> a >> b;if (op == 1) { cin >> c; add(b, a, c); }//a - b >= celse if (op == 2) { cin >> c; add(a, b, -c); }//a - b <= celse add(b, a, 0), add(a, b, 0);// a == b -> a >= b && a <= b}if (spfa(0)) puts("No");else puts("Yes");return 0;
}
洛谷P1993 小K的农场(差分约束)相关推荐
- P1993 小K的农场 (差分约束)
题目描述 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得一些含糊的信息(共m个),以下列三种形式描述: 农场a比农场b至少多种植了c个单位的作 ...
- BZOJ 3436: 小K的农场( 差分约束 )
orz云神... 真的给跪了...BFS版spfa T 掉了...然后DFS版的就A了...我现在很迷茫.... 这就是个普通的差分约束... ---------------------------- ...
- BZOJ 3436 小K的农场 差分约束
Description 背景 小K是个特么喜欢玩MC的孩纸... 描述 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得 一些含糊的信息(共m个 ...
- P1993 小 K 的农场
P1993 小 K 的农场 题解: 农场 a 比农场 b 至少多种植了 c 个单位的作物: 这句话说明:a - b > = c 转化可得 b - a < = - c add(a,b,-c) ...
- 【差分约束】POJ3159/LG P1993 小K的农场
终于把差分约束刷完了!!,这些题的套路都是很类似的 题目描述小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得一些含糊的信息(共m个),以下列三种 ...
- 洛谷P7515:矩阵游戏(差分约束)
解析 如果没有元素均要在 [0,1e6][0,1e6][0,1e6] 的条件,可以很容易的构造出一个合法解. 那么我们就要通过调整得到的解,使所有数都在合法范围内. 注意到,每次给某一行/列依次+1, ...
- bzoj 3436: 小K的农场(差分约束)
3436: 小K的农场 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1824 Solved: 810 [Submit][Status][Disc ...
- [BZOJ]3436: 小K的农场
题解: 差分约束 模板题 差分约束系统 联系 最短路 对于操作1:$ a-b\geqslant c\rightarrow b\leqslant a-c $ 也就是说a向b连一条-c的边 对于操作2 ...
- 2017提高组D1T1 洛谷P3951 小凯的疑惑
洛谷P3951 小凯的疑惑 原题 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想 ...
最新文章
- 5.4任务进展情况(整理——郑云飞)
- linux 找出耗io的,linux根据io消耗找进程
- java求职攻略_2020年求职攻略 《Java面试连成诀》教程免费分享
- cocos2dx游戏--欢欢英雄传说--添加游戏背景
- 数据库面试 - 分库分表
- 每个人都该知道的数字
- photoshop 插件_Photoshop的线性光
- 日活两亿的快手,如何用AI理解视频、做好分发
- php kb转换成字节,将kB换算为MB (千字节换算为兆字节)
- 关于修改了网页源文件但是网站显示却没变的问题解决
- java集合之trove4j高性能集合库
- 深入浅出解析AR/VR/MR三者之间的联系和区别
- iOS UIAppearance使用详解
- 本地搭建私有云盘:虚拟机安装群晖NAS 1/5
- [阅读记录]《数据分析师求职面试指南》-2
- 系统架构设计笔记(13)—— 数据挖掘
- 世界各地的土豆代表吃法
- Fatal error: Cannot declare class ComposerAutoloadComposerStaticInit,composer升级后报错
- 西邮Linux2020年面试题
- iso认证规则是什么,iso认证项目有哪些?
热门文章
- 很遗憾,区块链永远无法解决疫苗问题
- Linux: tmux工具
- Lecture 14 Context-Free Grammar
- linux如何美化桌面图标,桌面应用|使用 GNOME 优化工具自定义 Linux 桌面的 10 种方法...
- [链接]通俗易懂Word 2003 视频教程(Flash教程)
- 使用FileZilla上传和下载远程Linux服务器文件
- Java Bean详解
- sql 清空表数据、删除表数据、主键从1开始
- 解决Ubuntu 20.04 使用快捷键不能锁屏的问题
- bootstrap-table 合并单元格方法