P5960 【模板】差分约束算法
HyperlinkHyperlinkHyperlink
https://www.luogu.com.cn/problem/P5960
DescriptionDescriptionDescription
给定一个形如xi−xj≤yx_i-x_j\leq yxi−xj≤y的nnn元一次不等式组
求xxx的一组整数解
SolutionSolutionSolution
xi−xj≤kx_i-x_j\leq kxi−xj≤k
- 我们知道一个最短路数组ddd,若有边(i,j)(i,j)(i,j)它最后一定满足dj≤di+kd_j\leq d_i+kdj≤di+k
- 若有一个最长路数组ddd,若有边(i,j)(i,j)(i,j)它最后一定满足dj≥di+kd_j\geq d_i+kdj≥di+k
首先我们建边(0,i,0)(0,i,0)(0,i,0)意义后面说
观察到与上述不等式十分相似,可以利用spfaspfaspfa判负环的思想
- 建立边(j,i,w)(j,i,w)(j,i,w),跑最短路,最后可以得到ddd最大的一组非正整数解
- 建立边(i,j,−w)(i,j,-w)(i,j,−w),跑最长路,最后可以得到ddd的一组最小正整数解
本代码采用的是后者
时间复杂度:O(km)O(km)O(km),最坏情况O(nm)O(nm)O(nm)
CodeCodeCode
#include<queue>
#include<cctype>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;int n,m,dis[5010],tot,l[5010],in[5010];
bool vis[5010];
struct node{int next,to,w;}e[20010];
inline void add(int u,int v,int w){e[++tot]=(node){l[u],v,w};l[u]=tot;return;}
queue<int>q;
inline LL read()
{char c;LL d=1,f=0;while(c=getchar(),!isdigit(c)) if(c=='-') d=-1;f=(f<<3)+(f<<1)+c-48;while(c=getchar(),isdigit(c)) f=(f<<3)+(f<<1)+c-48;return d*f;
}
inline bool spfa(int s)
{memset(dis,0xcf,sizeof(dis));vis[s]=true;dis[s]=0;in[s]=1;q.push(s);while(q.size()){int u=q.front();q.pop();for(register int i=l[u];i;i=e[i].next){int v=e[i].to,w=e[i].w;if(dis[v]<dis[u]+w){dis[v]=dis[u]+w;if(vis[v]==0) {vis[v]=1;q.push(v);in[v]++;if(in[v]>n+1) return true;}}}vis[u]=false;}return false;
}
signed main()
{n=read();m=read();for(register int i=1;i<=n;i++) add(0,i,0);for(register int i=1,u,v,w;i<=m;i++) u=read(),v=read(),w=read(),add(u,v,-w);if(spfa(0)) puts("NO");else for(register int i=1;i<=n;i++) printf("%d ",dis[i]);
}
P5960 【模板】差分约束算法相关推荐
- 解题报告:P5960 【模板】差分约束算法(及常用技巧)
P5960 [模板]差分约束算法 差分约束系统 给出 n 个变量和 m 个约束条件,形如 xi−xj≤ckx_i - x_j \leq c_kxi−xj≤ck,你需要求出一组解,使得所有约束条件 ...
- 【模板】差分约束算法
[模板]差分约束算法 题意: 题解: 模板题 算法讲解 给出一组包含 m 个不等式,有 n 个未知数.求任意一组满足这个不等式组的解,或判定无解. 连边之后跑最短路,保证每个连通块都没有负环即可. 也 ...
- 【图论】差分约束算法详解
一.前言 在介绍差分约束之前,我们首先需要知道差分约束是用来解决什么问题的:差分约束是一个用来解决形如 X<=Y+c 的二元不等式组的可行解的一个算法.在高中数学中我们会学习如何使用线性规划的方 ...
- 洛谷OJ:P5960 【模板】差分约束算法
思路:差分约束模板题,注意使用SPFA来判断负环,也即无解的情况. #include<queue> #include<vector> #include<string> ...
- ACM模板——差分约束
a-b≤c a到b连一条c 最短路判负环,有负环就不行 转载于:https://www.cnblogs.com/Asurudo/p/11533296.html
- poj1716(差分约束+SPFA)
题意:整数间隔[a,b],a<b,是以a开头和以b结尾的所有连续整数的集合.在包含至少两个不同整数的集合中找到每个间隔的最小元素数. 思路:采用差分约束算法:当问题可以转化为形如一组 xi‑x' ...
- HDU3440(差分约束+SPFA算法)
题意:两栋房子之间的最大距离为D,也就是A-B<=D,现在求出最矮和最高房子之间的最大距离 思路:差分约束+SPFA算法: 当问题可以转化为形如一组 xi‑x'i<=yi 或一组 xi‑x ...
- POJ3169 Layout , 最短路算法解差分约束问题
POJ3169 Layout 题意: n头牛编号为1到n,按照编号的顺序排成一列,每两头牛的之间的距离 >= 0.这些牛的距离存在着一些约束关系:1.有ml组(u, v, w)的约束关系,表示牛 ...
- matlab:差分进化算法处理约束优化问题---------------------约束进化优化的复合微分优化(CCODE)
对于差分进化算法(DE)有着很好的性能,所以其应用也广泛. 下面主要讲解,差分进化算法在约束优化上的处理: 何为约束优化问题额?看下面一个数学模型就可以知道了.对于约束优化问题有以下几个重要的元素,目 ...
- 算法复习——差分约束(ssoi种树)
题目: 题目描述 为了绿化乡村,H 村积极响应号召,开始种树了. H 村里有 n 幢房屋,这些屋子的排列顺序很有特点,在一条直线上.于是方便起见,我们给它们标上 1-n .树就种在房子前面的空地上. ...
最新文章
- linux md5sum 的用法(转)
- 机器学习笔记:RMSProp,Adadelta
- numpy.argsort详解
- 网页加载出现没有合适的负载均衡器_gRPC实战--Kubernetes中使用envoy负载均衡gRPC流量...
- php使用redis持久化,redis是如何持久化的
- python以缩进对齐的方式划分语句块_python以什么划分语句块
- 解决Mono for android的xml编辑器无法代码完成的问题
- vue中使用swiper,vue-awesome-swiper
- stm32f407手册_入门篇 | STM32F407库函数开发L按键控制Led灯
- java 变量与常量_java变量和常量的区别是什么
- django中怎样新建html页面,Django网站创建从html页面到另一个应用程序的主html页面的链接...
- iOS 获取设备的方向
- Linux随笔15-Ubuntu20.04允许root用户图形界面登录、chrony局域网时间同步服务、ipxe实现系统自动化安装
- c语言使用三种方法计算圆周率,求用三种方法计算圆周率(C语言)
- 单条知识:什么是平面束方程
- TCP socket 中的长连接与短连接的区别
- Mysql 修改字段默认值问题
- 计算机毕业设计springboot+uniapp点餐外卖系统源码
- 对于“你需要Administrator权限才能删除该文件”情况的处理办法
- FCoin回来了?起死回生凭借何种“妙法”?
热门文章
- 技术人,一定要保持一颗有空就学习的心。
- C#学员管理系统(源代码)
- simon游戏c语言,120-Simon游戏步骤三-输出数字一秒后消失
- 计算机第四章文字处理软件应用课后答案,计算机应用基础第四章文字处理软件.doc...
- 如何用 Python 和 Pandas 分析犯罪记录开放数据?
- HTTP之PUT请求
- 大学物理实验(二)气体比热容比的测定
- iOS中百度地图API的总结
- 数模转换器的构成和特点
- from scipy.misc import comb ImportError: cannot import name comb