差分约束算法

news2024/11/23 23:58:59

差分约束是为了解决这样一组不等式问题:
在这里插入图片描述
这个咋解决》我们来看
对于某个下标k而言,提取出关于其的所有不等式,(其中xk在第一个),也就是

xk-x1<=m1
xk-x2<=m2
xk-x3<=m3....

对于这些不等式相当于是
xk取min(x1+m1,x2+m2,x3+m3,…)
那么这个时候如果可以想到图论算法的话就是,从x1,x2,x3…这些点连出一条指向xk的边,权值为m1,m2,m3,…(我之前写错是因为边连反了,权值也是反的,)用最短路算法来解决这个问题,那么就变成:求一个源点到各个点的最短路问题,这个时候,注意无解的情况,如果存在一个负权环负权环的定义应为环上的权值之和为负值,那么就说明出现了循环关系,也就是,我们来看:

x1-x2<=-1
x2-x3<=-2
x3-x1<=-2

这个是个怪圈也就是无解的情况。
那如果有正权环呢?
我们来看

x1-x2<=1
x2-x3<=2
x3-x1<=2

如果x1取1,那么x2可以取0,x3可以取-2
他们的大小关系是不一定的
但是上面那个怪圈是出现了循环小于的情况,所以无解
正权环可以理解成x1可能比x2大一点,但也有可能小于x2,负权的时候是一定小于
如果你觉得本蒟蒻写的不咋地,请移步:
神犇的讲解
题:
差分约束算法
注意由于有负权环,又需要检查负权环,所以使用Bellman-Ford算法即可
代码:

#include<bits/stdc++.h>
using namespace std;
#define INT_MAX 0x3f3f3f3f
const int length = 5e3 + 5;
vector<pair<pair<int, int>, int>> edge;
int dp[length];
int main(void)
{
	int n, m;
	scanf_s("%d%d", &n, &m);
	for (int i = 0; i < m; i++)
	{
		int a, b, c;
		scanf_s("%d%d%d", &a, &b, &c);
		edge.push_back({ {b,a},c });
	}
	//使用b_f算法
	for (int i = 1; i <= n; i++)
	{
		dp[i] = INT_MAX;
	}
	for (int i = 0; i < n - 1; i++)
	{
		for (int i = 0; i < m; i++)
		{
			int a = edge[i].first.first;
			int b = edge[i].first.second;
			int c = edge[i].second;
			dp[b] = min(dp[a] + c, dp[b]);
		}
	}
	int flag = 1;
	for (int i = 0; i < m; i++)
	{
		int a = edge[i].first.first;
		int b = edge[i].first.second;
		int c = edge[i].second;
		if (dp[b] > dp[a] + c)
		{
			flag = 0;
			break;
		}
	}
	if (flag == 0)
	{
		printf("NO");
	}
	else
	{
		for (int i = 1; i <= n; i++)
		{
			printf("%d ", dp[i]);
		}
	}
}

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

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

相关文章

面试常问:HTTPS的加密过程 ----- 光明和黑暗的恩怨情仇

目录 关于运营商劫持 &#xff1a; 什么是运营商劫持?? 什么是运营商? 为什么要劫持? 如何劫持? 劫持的危害 互联网公司怎么办? HTTPS 什么是HTTPS 一些概念&#xff1a; HTTPS加密 1. 对称加密&#xff1a; 2. 非对称加密 3. 非对称加密对称加密 4. 加密…

基于java+ssm购物商城网站系统-计算机毕业设计

项目介绍 乐优购物商城是商业贸易中的一条非常重要的道路&#xff0c;可以把其从传统的实体模式中解放中来&#xff0c;网上购物可以为消费者提供巨大的便利。通过乐优购物商城这个平台&#xff0c;可以使用户足不出户就可以了解现今的流行趋势和丰富的商品信息&#xff0c;为…

请求跨域问题

在前端请求接口时&#xff0c;出现跨域是很常见的问题&#xff0c;跨域的解决方法也很多&#xff0c;但是目前通用的是以下两种方式&#xff1a; 开发环境生产环境在服务端配置 CORS在服务端配置 CORS配置开发服务器代理&#xff0c;比如 vite-server.proxy配置生产服务器代理…

Debezium的增量快照

GreatSQL社区原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本&#xff0c;使用上与MySQL一致。作者&#xff1a; 如常 Debezium Incremental snapshotting Introduction CDC&#xff08;Change-Data-Capture&#xff09;正…

Java之反射相关知识补充

Java之反射一、概述1、静态语言和动态语言1.1 静态语言1.2 动态语言2、Reflection(反射)2.1 介绍2.2 流程2.3 Java反射机制提供的功能2.4 优缺点&#xff08;1&#xff09;优点&#xff08;2&#xff09;缺点2.5 反射相关主要API2.6 示例二、反射相关操作1、获取Class类的实例1…

第十二节:String类【java】

目录 &#x1f4d8;1.1 字符串构造方法 &#x1f4d2;1.2 String对象怎样比较 &#x1f4dc;1.2.1 引用类型 比较的是引用中的地址。 &#x1f4c4;1.2.2 boolean equals(Object anObject) 方法&#xff1a;比较怕两个引用所指的对象当中的内容是否一致 &#x1f4d1;1.2…

企业级nginx使用

企业级nginx使用 nginx实现平滑升级 [rootlnmp nginx-1.16.0]# cd /usr/local/nginx/sbin/ [rootlnmp sbin]# ls nginx nginx.old [rootlnmp sbin]# ./nginx -v nginx version: nginx/1.16.0 [rootlnmp sbin]# ./nginx.old -v nginx version: nginx/1.14.2 [rootlnmp sbin]#操…

物联网开发笔记(49)- 使用Micropython开发ESP32开发板之控制RGB全彩LED模块

一、目的 这一节我们学习如何使用我们的ESP32开发板来控制RGB全彩LED模块。 二、环境 ESP32 RGB全彩LED模块 Thonny IDE 几根杜邦线 1&#xff0c;共阴极接线方法 2&#xff0c;共阳极接线方法 三、代码 1&#xff0c;亮指定的颜色&#xff0c;比如百度蓝。 我们使用取色…

万字长文,精美插图,带你玩转redis

资料下载&#xff1a; 链接: https://pan.baidu.com/s/1ue4Bnv4b4ifp0S0I_yOJ_w?pwdd9x9 提取码: d9x9 Redis学习笔记 1. 认识Redis 1.1 什么是NoSQL&#xff1f; SQL是关系型数据库&#xff0c;NoSQL是非关系型数据库 下面是几种非关系型数据库及其优缺点和应用场景。 分类…

[附源码]java毕业设计网上书店系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【分隔结构】动宾分离

动宾分离 动词 宾语 状语&#xff1a;如果宾语较长&#xff0c;状语较短&#xff0c;会转化为 动词 状语 宾语 While I disapprove of what you say, I would defend to the death your right to say it. 名词 引导词 主语 及物动词 You are the man that I will marry…

【K8S】学习笔记(一)

K8S学习笔记一、Kubernetes1.1、K8S功能1.2、K8S架构组件1.2.1、架构细节1.3、K8S核心概念1.3.1、Pod1.3.2、Volume1.3.3、Controller1.3.4、Deployment1.3.5、Service1.3.6、Label1.3.7、Namespace1.3.8、API二、搭建K8S2.1、K8S搭建规划2.1.1、单master集群2.1.2、多master集…

Html5的新增特性

Html5的新增特性主要是针对以前的不足&#xff0c;增加了一些新的标签&#xff0c;新的表单和新的表单属性等。 这些新特性都有兼容性问题&#xff0c;基本是IE9以上版本的浏览器才支持&#xff0c;如果不考虑兼容性问题&#xff0c;可以大量使用这些新特性。 声明&#xff1…

m基于迫零ZF准则的通信均衡器的matlab仿真

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 在数字通信系统中&#xff0c;码间串扰和加性噪声是造成信号传输失真的主要因素&#xff0c;为克服码间串扰&#xff0c;在接收滤波器和抽样判决器之间附加一个可调滤波器&#xff0c;用…

STM32CubeMX:串口DMA

DMA&#xff1a;直接储存区访问&#xff0c;DMA传输将数据从一个地址空间复制到另一个空间。DMA传输方式无需CPU直接控制传输&#xff0c;也没有中断处理方式那样保留现场和恢复现场过程&#xff0c;通过硬件为RAM何IO设备开辟一条直接传输数据的通道&#xff0c;从而可以提高C…

WSL下安装ubuntu 18.04 +meep进行FDTD仿真计算

WSL下安装ubuntu 18.04 meep进行FDTD仿真计算前言WSL安装过程打开虚拟环境下载Ubuntu并修改安装路径更改软件源MeepVScode远程访问测试程序前言 使用meep进行FDTD开发&#xff0c;开源。这里记录一下自己的安装过程&#xff0c;可以不安装在C盘&#xff0c;有助于后面进行修改…

【JVM】java的jvm类加载器和类加载子系统

JVM类加载器和类加载子系统一、JVM体系结构二、ClassLoader类介绍三、类加载子系统3.1 加载阶段3.1.1 引导类加载器&#xff08;Bootstrap ClassLoader&#xff09;3.1.2 扩展类加载器&#xff08;Extension ClassLoader&#xff09;3.1.3 应用程序类加载器&#xff08;Applica…

Android入门第32天-Android中的Alert Dialog的使用大全

写在我的第200篇博客中的“前言” 这篇是我的第200篇博客。落笔写正文前我感触彼深。自从一个小P孩那时写博客只是为了一时的好玩&#xff0c;到逐步发觉只有让越来越多的人理解了技术&#xff0c;把技术普及到门槛越来越低&#xff0c;才会反推技术人员的处镜越来越好。因为必…

Allegro如何输出STP文件操作指导

Allegro如何输出STP文件操作指导 Stp文件用于查看实物,Allegro支持输出STP格式的文件,下面介绍如何输出,操作步骤如下 选择File-export-STEP 根据自己的需要选择参数 如果需要输出电气过孔,选electronic hole,需要外层铜皮,勾选External Copper 常规默认值就可以了,…

UE5笔记【六】流明引擎Lumen简介;Lumen处理发光物体。

RealTimeGlobal illumination System。实时全局照明系统。 打开Lumen 从设置中&#xff0c;打开【项目设置】往下找【渲染Render】 然后再GI中将途中两项选择为Lumen。 同时需要一个后期处理量PostProcessVolume。刚好场景中有。 需要勾选【全局光照GI】中的【方法】选定为【…