差分约束 C++ 算法例题

差分约束

差分约束 是一种特殊的 n 元一次不等式组,m 个约束条件,可以组成形如下的格式:
{ x 1 − x 1 ′ ≤ y 1 x 2 − x 2 ′ ≤ y 2 ⋯ x m − x m ′ ≤ y m \begin{cases} x_1-x_1^{'} \le y_1 \\ x_2-x_2^{'} \le y_2 \\ \cdots \\ x_m-x_m^{'} \le y_m \end{cases} x1x1y1x2x2y2xmxmym
我们的任务是需要求出一组解, x 1 = a 1 , x 2 = a 2 , ⋯ , x n = a n x_1=a_1,x_2=a_2,\cdots,x_n=a_n x1=a1,x2=a2,,xn=an

使得不等式组成立,否则为无解

注意到,每个式子都可以变形为 x i ≤ x i ′ + y i x_i\le x_i^{'}+y_i xixi+yi

那么就不难想到,图论中的 三角不等式 ,即为松弛操作

回忆——

if(dis[edge[i].to]>dis[t]+edge[i].w)dis[edge[i].to]=dis[t]+edge[i].w;

虽说它这里是 >,不过也没有关系,不用考虑

既然知道了,那我们就按照图论的方法来解:

dis[0]=0 ,并且向着每一个节点连接一条权值为0的边,运用单源最短路,判断 负权环 ,若有负权环则为无解,否则依次输出 dis[i]

提到负权环,就不得不提判断负权环的大佬算法——SPFA!!!

对于那些不废 SPFA 的同学们,可以翻到我之前的博客区康康~~

好啦,看模板题——

luoguP5960 [模板]差分约束

AC Code:

#include<bits/stdc++.h>
using namespace std;
int n,m,cntedge;
const int MAXM=5e3+5,inf=65;
struct EDGE{int to,w,pre;
}edge[MAXM<<1];
int head[MAXM];
void add(int from,int to,int w)
{edge[++cntedge].to=to;edge[cntedge].w=w;edge[cntedge].pre=head[from];head[from]=cntedge;return;
}
bool vis[MAXM];
int u,v,w,t;
int dis[MAXM],cnt[MAXM];
queue<int> q;
bool spfa()
{q.push(0);cnt[0]++;vis[0]=true;while(!q.empty()){t=q.front();q.pop();vis[t]=false;for(int i=head[t];i;i=edge[i].pre){if(dis[edge[i].to]>dis[t]+edge[i].w){dis[edge[i].to]=dis[t]+edge[i].w;if(vis[edge[i].to]) continue;q.push(edge[i].to);vis[edge[i].to]=true;if(++cnt[edge[i].to]>=n+1)return false;}}}return true;
}
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) add(0,i,0);for(int i=1;i<=m;i++){scanf("%d%d%d",&u,&v,&w);add(v,u,w);}memset(dis,inf,sizeof(dis));dis[0]=0;if(!spfa())printf("NO\n");else{for(int i=1;i<=n;i++)printf("%d ",dis[i]);printf("\n");}	return 0;
}

AC记录

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】 技术栈和开发环境搭建

各位大佬好 &#xff0c;这里是阿川的博客 &#xff0c; 祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 博客目录 技术栈编程语言库框架编辑器项目IDE …

行业分析---马斯克的Tesla

1 背景 在前面的博文《行业分析---我眼中的Apple Inc.》中&#xff0c;笔者曾介绍过苹果公司的财报和商业。依然本着提升自己看公司的能力&#xff0c;尝试去分析相对熟悉的公司&#xff0c;看懂它的商业。在之前的博客《自动驾驶---Tesla之FSD简介》中&#xff0c;笔者也简单介…

UE5C++ FString做为参数取值时报错error:C4840

问题描述 用来取FString类型的变量时报错&#xff1a; 问题解决 点击错误位置&#xff0c;跳转到代码&#xff1a; void AMyDelegateActor::TwoParamDelegateFunc(int32 param1, FString param2) {UE_LOG(LogTemp, Warning, TEXT("Two Param1:%d Param2:%s"), param…

带你探索CA和SSL证书

目录 一、什么是CA&#xff1f; 二、什么是SSL证书&#xff1f; 三、SSL证书分类和文件种类&#xff1f; 3.1 证书的分类&#xff1a; 3.2证书格式&#xff1a; 四、SSL和TSL 五、PSK介绍 六、nginx配置介绍 一、什么是CA&#xff1f; CA是证书的签发机构&#xff0c;它是…

书生作业:RAG

视频&#xff1a;https://www.bilibili.com/video/BV1QA4m1F7t4/ 教程&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/huixiangdou/readme.md 作业&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/huixiangdou/homework.md 项目地址&#xff1a;h…

【Vue基础】Vue在组件数据传递详解

Vue核心基础-CSDN博客 先回顾Vue特性&#xff1a; Vue.js 是一个用于构建用户界面的渐进式框架&#xff0c;具有许多强大的特性。以下是一些主要的 Vue 特性&#xff1a; 响应式数据&#xff1a;Vue 使用双向绑定来实现数据的响应式更新。当数据发生变化时&#xff0c;视图会自…

【0003day】VOSviewer分析

这个软件也可以用知网&#xff0c;也可以用web of science。 首先&#xff0c;需要创建数据。这个数据如何创建&#xff0c;需要参考对应的教程。&#xff08;本文以web of science为平台来做分析。&#xff09; 首先&#xff0c;创建对应的数据库。 一直下一步 让后选择完…

【全开源】JAVA同城组局同城找搭子系统源码支持微信小程序微信公众号H5 APP

让你周末不孤单 发布活动&#xff1a;用户可以发布自己想要进行的活动&#xff0c;包括活动类型、时间、地点等信息&#xff0c;方便其他用户查找和参与。搜索搭档&#xff1a;用户可以根据活动类型、时间、地点等信息&#xff0c;搜索附近的搭档&#xff0c;快速找到志同道合…

基于springboot的代驾管理系统的设计与实现

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

2024.1IDEA 到2026年

链接&#xff1a;https://pan.baidu.com/s/1hjJEV5A5k1Z9JbPyBXywSw?pwd9g4i 提取码&#xff1a;9g4i解压之后,按照 操作说明.txt 操作; IntelliJ IDEA 2024.1 (Ultimate Edition) Build #IU-241.14494.240, built on March 28, 2024 Licensed to gurgles tumbles You have…

STM32快速入门(串口传输之USART)

STM32快速入门&#xff08;串口传输之USART&#xff09; 前言 USART串口传输能实现信息在设备之间的点对点传输&#xff0c;支持单工、半双工、全全双工&#xff0c;一般是有三个引脚&#xff1a;TX、RX、SW_RX&#xff08;共地&#xff09;。不需要一根线来同步时钟。最大优…

论文盲审吐槽多,谁给盲审不负责的老师买单?如何看待浙江大学「一刀切」的研究生学位论文双盲评审制度?

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验&#xff0c;帮助大家尽早适应研究生生活&#xff0c;尽快了解科研的本质。祝一切顺利&#xff01;—…