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 .树就种在房子前面的空地上. ...
最新文章
- TCL with SNPS llengthlappendget_cellsget_ports
- BZOJ 4710: [Jsoi2011]分特产
- 操作主机 Infrastructure Master[为企业维护windows server 2008系列八]
- Python 依赖库
- cad动态块制作翻转_定制橱柜家具中CAD门型动态块制作方式图文讲解加视频
- 数据结构-栈2-链式存储
- 简单梳理帆软报表即决策系统的登录步骤 一
- Windows Apache Django 配置
- 支付宝授权登陆php,php实现支付宝授权登录
- cdlinux U盘启动制作方法
- 计算机管理用户拒绝访问,win10系统打不开管理员账户 administrator拒绝访问的解决方法...
- 504网站服务器传输超时,504源服务器链接超时cdn
- Python 网络编程
- Live-Charts在WPF中的使用
- 人体关节正常活动范围
- [DownUnderCTF 2022] crypto部分复现
- 科学研究是有闲人群的玩艺———读爱因斯坦的短文有感
- 关于Halcon的离心机试管槽定位
- CIKM 2022 AnalytiCup Competition: 联邦异质任务学习
- LTspice使用教程笔记
热门文章
- 白苹果修复_ReiBoot Pro——iOS系统修复软件
- P1084 [NOIP2012 提高组] 疫情控制
- Peer cert cannot be verified or peer cert invalid 尝试其他镜像。
- 人生苦短,聊聊Python的那些特点
- 服务器获取百度商桥消息,百度统计和百度商桥什么关系?怎么部署同一段代码实现统计和商桥弹窗?...
- elasticsearch api 调用
- 图像处理领域术语英文对应
- 国内外优秀计算机视觉团队汇总(2020)
- wtg linux双系统,Windows和Linux同时装入移动硬盘,实现可移动专属双系统
- Android 更换皮肤