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. TCL with SNPS llengthlappendget_cellsget_ports
  2. BZOJ 4710: [Jsoi2011]分特产
  3. 操作主机 Infrastructure Master[为企业维护windows server 2008系列八]
  4. Python 依赖库
  5. cad动态块制作翻转_定制橱柜家具中CAD门型动态块制作方式图文讲解加视频
  6. 数据结构-栈2-链式存储
  7. 简单梳理帆软报表即决策系统的登录步骤 一
  8. Windows Apache Django 配置
  9. 支付宝授权登陆php,php实现支付宝授权登录
  10. cdlinux U盘启动制作方法
  11. 计算机管理用户拒绝访问,win10系统打不开管理员账户 administrator拒绝访问的解决方法...
  12. 504网站服务器传输超时,504源服务器链接超时cdn
  13. Python 网络编程
  14. Live-Charts在WPF中的使用
  15. 人体关节正常活动范围
  16. [DownUnderCTF 2022] crypto部分复现
  17. 科学研究是有闲人群的玩艺———读爱因斯坦的短文有感
  18. 关于Halcon的离心机试管槽定位
  19. CIKM 2022 AnalytiCup Competition: 联邦异质任务学习
  20. LTspice使用教程笔记

热门文章

  1. 白苹果修复_ReiBoot Pro——iOS系统修复软件
  2. P1084 [NOIP2012 提高组] 疫情控制
  3. Peer cert cannot be verified or peer cert invalid 尝试其他镜像。
  4. 人生苦短,聊聊Python的那些特点
  5. 服务器获取百度商桥消息,百度统计和百度商桥什么关系?怎么部署同一段代码实现统计和商桥弹窗?...
  6. elasticsearch api 调用
  7. 图像处理领域术语英文对应
  8. 国内外优秀计算机视觉团队汇总(2020)
  9. wtg linux双系统,Windows和Linux同时装入移动硬盘,实现可移动专属双系统
  10. Android 更换皮肤