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

  1. 我们知道一个最短路数组ddd,若有边(i,j)(i,j)(i,j)它最后一定满足dj≤di+kd_j\leq d_i+kdj​≤di​+k
  2. 若有一个最长路数组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判负环的思想

  1. 建立边(j,i,w)(j,i,w)(j,i,w),跑最短路,最后可以得到ddd最大的一组非正整数解
  2. 建立边(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 【模板】差分约束算法相关推荐

  1. 解题报告:P5960 【模板】差分约束算法(及常用技巧)

    P5960 [模板]差分约束算法 差分约束系统 给出 n 个变量和 m 个约束条件,形如 xi−xj≤ckx_i - x_j \leq c_kxi​−xj​≤ck​,你需要求出一组解,使得所有约束条件 ...

  2. 【模板】差分约束算法

    [模板]差分约束算法 题意: 题解: 模板题 算法讲解 给出一组包含 m 个不等式,有 n 个未知数.求任意一组满足这个不等式组的解,或判定无解. 连边之后跑最短路,保证每个连通块都没有负环即可. 也 ...

  3. 【图论】差分约束算法详解

    一.前言 在介绍差分约束之前,我们首先需要知道差分约束是用来解决什么问题的:差分约束是一个用来解决形如 X<=Y+c 的二元不等式组的可行解的一个算法.在高中数学中我们会学习如何使用线性规划的方 ...

  4. 洛谷OJ:P5960 【模板】差分约束算法

    思路:差分约束模板题,注意使用SPFA来判断负环,也即无解的情况. #include<queue> #include<vector> #include<string> ...

  5. ACM模板——差分约束

    a-b≤c a到b连一条c 最短路判负环,有负环就不行 转载于:https://www.cnblogs.com/Asurudo/p/11533296.html

  6. poj1716(差分约束+SPFA)

    题意:整数间隔[a,b],a<b,是以a开头和以b结尾的所有连续整数的集合.在包含至少两个不同整数的集合中找到每个间隔的最小元素数. 思路:采用差分约束算法:当问题可以转化为形如一组 xi‑x' ...

  7. HDU3440(差分约束+SPFA算法)

    题意:两栋房子之间的最大距离为D,也就是A-B<=D,现在求出最矮和最高房子之间的最大距离 思路:差分约束+SPFA算法: 当问题可以转化为形如一组 xi‑x'i<=yi 或一组 xi‑x ...

  8. POJ3169 Layout , 最短路算法解差分约束问题

    POJ3169 Layout 题意: n头牛编号为1到n,按照编号的顺序排成一列,每两头牛的之间的距离 >= 0.这些牛的距离存在着一些约束关系:1.有ml组(u, v, w)的约束关系,表示牛 ...

  9. matlab:差分进化算法处理约束优化问题---------------------约束进化优化的复合微分优化(CCODE)

    对于差分进化算法(DE)有着很好的性能,所以其应用也广泛. 下面主要讲解,差分进化算法在约束优化上的处理: 何为约束优化问题额?看下面一个数学模型就可以知道了.对于约束优化问题有以下几个重要的元素,目 ...

  10. 算法复习——差分约束(ssoi种树)

    题目: 题目描述 为了绿化乡村,H 村积极响应号召,开始种树了. H 村里有 n 幢房屋,这些屋子的排列顺序很有特点,在一条直线上.于是方便起见,我们给它们标上 1-n .树就种在房子前面的空地上. ...

最新文章

  1. linux md5sum 的用法(转)
  2. 机器学习笔记:RMSProp,Adadelta
  3. numpy.argsort详解
  4. 网页加载出现没有合适的负载均衡器_gRPC实战--Kubernetes中使用envoy负载均衡gRPC流量...
  5. php使用redis持久化,redis是如何持久化的
  6. python以缩进对齐的方式划分语句块_python以什么划分语句块
  7. 解决Mono for android的xml编辑器无法代码完成的问题
  8. vue中使用swiper,vue-awesome-swiper
  9. stm32f407手册_入门篇 | STM32F407库函数开发L按键控制Led灯
  10. java 变量与常量_java变量和常量的区别是什么
  11. django中怎样新建html页面,Django网站创建从html页面到另一个应用程序的主html页面的链接...
  12. iOS 获取设备的方向
  13. Linux随笔15-Ubuntu20.04允许root用户图形界面登录、chrony局域网时间同步服务、ipxe实现系统自动化安装
  14. c语言使用三种方法计算圆周率,求用三种方法计算圆周率(C语言)
  15. 单条知识:什么是平面束方程
  16. TCP socket 中的长连接与短连接的区别
  17. Mysql 修改字段默认值问题
  18. 计算机毕业设计springboot+uniapp点餐外卖系统源码
  19. 对于“你需要Administrator权限才能删除该文件”情况的处理办法
  20. FCoin回来了?起死回生凭借何种“妙法”?

热门文章

  1. 技术人,一定要保持一颗有空就学习的心。
  2. C#学员管理系统(源代码)
  3. simon游戏c语言,120-Simon游戏步骤三-输出数字一秒后消失
  4. 计算机第四章文字处理软件应用课后答案,计算机应用基础第四章文字处理软件.doc...
  5. 如何用 Python 和 Pandas 分析犯罪记录开放数据?
  6. HTTP之PUT请求
  7. 大学物理实验(二)气体比热容比的测定
  8. iOS中百度地图API的总结
  9. 数模转换器的构成和特点
  10. from scipy.misc import comb ImportError: cannot import name comb