【BZOJ - 3436】小K的农场(差分约束)

题干:

背景

小K是个特么喜欢玩MC的孩纸。。。

描述

小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得

一些含糊的信息(共m个),以下列三种形式描述:农场a比农场b至少多种植了c个单位的作物,农场a比农场b至多

多种植了c个单位的作物,农场a与农场b种植的作物数一样多。但是,由于小K的记忆有些偏差,所以他想要知道存

不存在一种情况,使得农场的种植作物数量与他记忆中的所有信息吻合。

Input

第一行包括两个整数n和m,分别表示农场数目和小K记忆中的信息的数目接下来m行:如果每行的第一个数是1,接

下来有三个整数a,b,c,表示农场a比农场b至少多种植了c个单位的作物如果每行第一个数是2,接下来有三个整数a

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

种植的数量与b一样。1<=n,m,a,b,c<=10000

Output

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

Sample Input

3 3 3 1 2 1 1 3 1 2 2 3 2

Sample Output

Yes 样例解释 三个农场种植的数量可以为(2,2,1)

题目大意:

  中文题意。

解题报告:

  就是个差分约束的板子题,建完图之后就看有没有负环就可以。但是这题不保证点是连通的,所以你如果要直接跑负环的话需要以每一个点为起点开始跑,显然是不合算的,所以最好的方式就是新建一个点,让他到每一个点的连一条权值为0的边,这样就联系起来了。

理性的解释一下也解释得通,因为你要加上一个点使得对原约束没有任何影响(即不放大原有条件也不缩小原有条件(也就是添加新的约束)),就相当于0号点的值本该是-INF,所以加上了:对任意一个点V,X_V-X_0<=0,这样一个限制,X0的取值是-INF,保证合法。

当然为了合法你加边的时候权值是INF也行(当然得用longlong了不然就溢出了),代表的含义是X_V-X_0<=INF

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define F first
#define S second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
typedef pair<int,int> PII;
const int MAX = 2e5 + 5;
const int INF = 0x3f3f3f3f;
struct Edge {int ne,v,w; 
} e[MAX];
int tot,n,m;
int head[MAX];
void add(int u,int v,int w) {e[++tot].v = v;e[tot].w = w;e[tot].ne = head[u];head[u] = tot;
}
int dis[MAX],cnt[MAX],vis[MAX];
bool spfa(int st) {memset(dis,INF,sizeof dis);queue<int> q;dis[st]=0;q.push(st);vis[st]=1;
//	cnt[st]=1;while(q.size()) {int cur = q.front(); q.pop();vis[cur]=0;for(int i = head[cur]; ~i; i = e[i].ne) {int v = e[i].v;if(dis[v] <= dis[cur] + e[i].w) continue;dis[v] = dis[cur] + e[i].w;if(!vis[v]) {cnt[v]=cnt[v]+1;vis[v]=1;q.push(v);if(cnt[v] > n) return 0;}}}return 1;
}
int main()
{memset(head,-1,sizeof head);cin>>n>>m;for(int op,a,b,c,i = 1; i<=m; i++) {scanf("%d%d%d",&op,&a,&b);if(op != 3) scanf("%d",&c);if(op == 1) add(a,b,-c);if(op == 2) add(b,a,c);if(op == 3) {add(a,b,0);add(b,a,0);}}for(int i = 1; i<=n; i++) add(0,i,0);if(spfa(0)) puts("Yes");else puts("No");return 0 ;
}

 

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

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

相关文章

分组密码简介和五大分组模式

分组密码 分组密码&#xff08;blockcipher&#xff09;是每次只能处理特定长度的一块数据的一类密码算法&#xff0c;这里的一块"就称为分组&#xff08;block&#xff09;。此外&#xff0c;一个分组的比特数就称为分组长度&#xff08;blocklength&#xff09;。例如&…

Java Web(五) JSP详解(四大作用域九大内置对象等)

前面讲解了Servlet&#xff0c;了解了Servlet的继承结构&#xff0c;生命周期等&#xff0c;并且在其中的ServletConfig和ServletContext对象有了一些比较详细的了解&#xff0c;但是我们会发现在Servlet中编写一些HTML代码&#xff0c;是很不方便的一件事情&#xff0c;每次都…

Apollo进阶课程 ⑤ | Apollo硬件开发平台介绍

目录 1&#xff09;Uber事故原因分析 2&#xff09;自动驾驶的第一天条-----安全 3&#xff09;自动驾驶汽车的硬件系统 4&#xff09;自动驾驶汽车感知类传感器介绍 5&#xff09;自动驾驶汽车的传感器 6&#xff09;自动驾驶的计算单元 7&#xff09;自动驾驶的线控系…

使用tcpdump,adb进行手机抓包

准备 手机 root PC安装ADB 下载压缩包&#xff0c;解压即可 链接&#xff1a;https://pan.baidu.com/s/1Hv-IqpQutBVTHuriakQUTg 提取码&#xff1a;q57q 配置环境变量 在系统环境Path中添加 adb.exe 的地址 验证安装 adb version 出现版本&#xff0c;即为成功 开启adb服…

依赖注入和控制反转的理解,写的太好了。

学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念&#xff0c;对于初学Spring的人来说&#xff0c;总觉得IoC 、DI这两个概念是模糊不清的&#xff0c;是很难理解的&#xff0c;今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及…

Apollo进阶课程 ⑥ | 高精地图与自动驾驶的关系

目录 1&#xff09;高精地图与自动驾驶 2&#xff09;什么是高精地图 3&#xff09;高精地图与导航地图 4&#xff09;高精地图---无人驾驶的核心基础模块 5&#xff09;高精地图与定位模块的关系 6&#xff09;高精地图与感知模块的关系 7&#xff09;高精地图与规划、…

【POJ - 1275】Cashier Employment(差分约束,建图)

题干&#xff1a; A supermarket in Tehran is open 24 hours a day every day and needs a number of cashiers to fit its need. The supermarket manager has hired you to help him, solve his problem. The problem is that the supermarket needs different number of c…

InfluxDB 简介、安装和简单使用

简介 InfluxDB是一个由InfluxData开发的开源时序型数据库。它由Go写成&#xff0c;着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据&#xff0c;IoT行业的实时数据等场景。可以理解为按时间记录一些数据&#xff08;常用的监控数据、埋点统计数据…

4)机器学习基石笔记 Lecture4:Feasibility of Learning

目录 1&#xff09;Learning is Impossible 2&#xff09;Probability to the Rescue 3&#xff09;Connection to Learning 4&#xff09;Connection to Real Learning 上节课我们主要介绍了机器学习问题的类型&#xff0c;主要是二元分类和回归问题。本节课&#xff0c;我…

Java注解全面解析

1.基本语法 注解定义看起来很像接口的定义。事实上&#xff0c;与其他任何接口一样&#xff0c;注解也将会编译成class文件。 Target(ElementType.Method)Retention(RetentionPolicy.RUNTIME)public interface Test {} 除了符号以外&#xff0c;Test的定义很像一个空的接口。…

ubuntu18.04下安装grafana6和简单使用

ubuntu18.04下安装grafana6 环境 ubuntu18.04 下载 sudo apt-get install -y adduser libfontconfig1 # 使用wget 下载会很慢 # 推荐百度网盘&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1y2I4LwuslB5kHAZwV8RNxw 提取码&#xff1a;o19t # 或者csdn&#xff1a;[gr…

VMware虚拟机下安装Ubuntu16.04镜像完整教程

目录 1&#xff09;安装前准备 2&#xff09;安装Ubuntu 16.04镜像 3&#xff09;One More Thing 1&#xff09;安装前准备 PC电脑操作系统是WIN7&#xff0c;已正确安装虚拟机VMware 12。 2&#xff09;安装Ubuntu 16.04镜像 下载Ubuntu镜像文件&#xff0c;下载链接为…

JAVA 注解的基本原理

以前&#xff0c;『XML』是各大框架的青睐者&#xff0c;它以松耦合的方式完成了框架中几乎所有的配置&#xff0c;但是随着项目越来越庞大&#xff0c;『XML』的内容也越来越复杂&#xff0c;维护成本变高。 于是就有人提出来一种标记式高耦合的配置方式&#xff0c;『注解』…

查看ubuntu系统的版本信息

目录 1&#xff09;查看linux内核、gcc版本、ubuntu版本 2&#xff09;显示linux的内核版本和系统是多少位 1&#xff09;查看linux内核、gcc版本、ubuntu版本 显示如下 Linux version 4.15.0-29-generic (builddlcy01-amd64-024) linux内核版本号 gcc version 5.4…

框架基础——全面解析Java注解

阅读目录 一、概念二、Java中的常见注解三、注解的分类四、自定义注解五、注解的项目实战六、注解总结 为什么学习注解&#xff1f; 学习注解有什么好处&#xff1f; 学完能做什么&#xff1f; 答&#xff1a;1. 能够读懂别人写的代码&#xff0c;特别是框架相关的代码&…

CS231n Convolutional Neural Networks for Visual Recognition------Scipy and MatplotlibTutorial

源链接为&#xff1a;http://cs231n.github.io/python-numpy-tutorial/。 这篇指导书是由Justin Johnson编写的。 在这门课程中我们将使用Python语言完成所有变成任务&#xff01;Python本身就是一种很棒的通用编程语言&#xff0c;但是在一些流行的库帮助下&#xff08;numpy&…

Python之Numpy入门实战教程(1):基础篇

Numpy、Pandas、Matplotlib是Python的三个重要科学计算库&#xff0c;今天整理了Numpy的入门实战教程。NumPy是使用Python进行科学计算的基础库。 NumPy以强大的N维数组对象为中心&#xff0c;它还包含有用的线性代数&#xff0c;傅里叶变换和随机数函数。 强烈建议大家将本文中…

Go初识与问题

变量&#xff06;常量 变量 命名 由字母、数字、下划线组成&#xff0c;首个字符不能是数字关键字、保留字不能作为变量名变量名字区分大小写驼峰命名声明 1. var : 全局变量var 变量名称 类型var 变量名称1,变量名称2 类型 (同一种类型)var (变量名称1 类型1变量名称2 类型…

1.3)深度学习笔记------浅层神经网络

目录 1&#xff09;Neural Network Overview 2&#xff09;Neural Network Representation 3&#xff09;Computing a Neural Network’s Output&#xff08;重点&#xff09; 4&#xff09;Vectorizing across multiple examples 5&#xff09;Activation functions 6&a…

SpringMVC 的执行流程

SpringMVC 的执行流程 1&#xff09;用户向服务器发送请求&#xff0c;请求被 Spring 前端控制 Servelt DispatcherServlet捕获&#xff1b; 2&#xff09;DispatcherServlet 对请求 URL 进行解析&#xff0c;得到请求资源标识符&#xff08;URI&#xff09;。然后根据该 URI&…