首页 > 其他分享 >差分约束

差分约束

时间:2023-07-11 12:13:26浏览次数:34  
标签:use qu int 差分 约束 leq ddis dis

差分约束

对于形如:

\[\begin{cases} x_{c_{1}}-x_{c_{1}'}\leq y_1 \\ x_{c_{2}}-x_{c_{2}'}\leq y_2 \\ ...\\ x_{c_{n}}-x_{c_{n}'}\leq y_n \\ \end{cases} \]

对于单个式子而言\(x_{c_{1}}-x_{c_{1}'}\leq y_1\),可转换为\(x_{c_{1}}\leq x_{c_{1}'}+y_1\),而在图论中的点与点的距离也可以表示成这种样子,也就是点\(c_1'\)到\(c_1\)有一条权值为\(y_1\)的单向边

建图,用SPFA判断是否有负环即可判断是否有解,并且最后的dis就是一个可行解

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define fo(i,n) for(int i = 1;i <= n;i++)
#define debug(i,x) cout << "case" << (i) << ":" << x << endl;
#define lson(x) (x << 1)
#define rson(x) (x << 1 | 1)
const int inf = 1e9;
const int MAXN = 5e3 + 10;
ll num[MAXN],dis[MAXN];
bool use[MAXN];
vector<pair<int,int>> ed[MAXN];
int n,m;
void init(){
	memset(dis,1e9,sizeof(dis));
}
bool spfa(){
	dis[1] = 0;
	queue<int> qu;
	fo(i,n){
		qu.push(i);
		use[i] = 1;
		num[i]++;
	}
	while(!qu.empty()){
		int u = qu.front();
		use[u] = 0;
		qu.pop();
		for(auto pa:ed[u]){
			int v = pa.first,ddis = pa.second;
			if(ddis + dis[u] < dis[v]){
				dis[v] = ddis + dis[u];
				if(!use[v]){
					num[v]++;
					use[v] = 1;
					qu.push(v);
					if(num[u] >= n)//出现负环
						return 0;
				}
			}
		}
	}
	return 1;
}
int main()
{
	cin >> n >> m;
	init();
	for(int i = 1;i <= m;i++){
		int u,v,dis;cin >> u >> v >> dis;
		ed[v].push_back({u,dis});
	}
	bool f = 1;
	if(!spfa()){
		f = 0;
	}
	if(f)
		fo(i,n)
			cout << dis[i] << ' ';
	else
		cout << "NO" << endl;
}

标签:use,qu,int,差分,约束,leq,ddis,dis
From: https://www.cnblogs.com/xxcdsg/p/17544280.html

相关文章

  • MATLAB代码:基于列约束生成法CCG的两阶段鲁棒问题求解
    MATLAB代码:基于列约束生成法CCG的两阶段鲁棒问题求解关键词:两阶段鲁棒列约束生成法CCG算法鲁棒优化参考文档:《Solvingtwo-stagerobustoptimizationproblemsusingacolumn-and-constraintgenerationmethod》仿真平台:MATLABYALMIP+CPLEX优势:代码注释详实,适合参考学习,非......
  • 一文读懂苹果的差分隐私技术原理
    在2016年6月份的苹果WWDC大会上提到了一项差分隐私技术(DifferentialPrivacy),其作用是对用户的数据进行扰动,然后上传到苹果服务器。苹果能通过这些扰动过的数据计算出用户群体的行为模式,但是对每个用户个体的数据却无法解析。苹果通过采用差分隐私技术,实现了在不得到用户......
  • 007 学习笔记--约束 + 多表查询
    约束:是作用于表中字段上的规则,用于限制存储在标中的数据;其目的,是保证数据库中的数据的正确、有效和完整性;约束分类:--约束createtableifnotexistsusers( idintPRIMARYkeyauto_incrementCOMMENT'主键', nameVARCHAR(100)notnulluniqueCOMMENT'姓名',--......
  • MATLAB代码:基于列约束生成法CCG的两阶段问题求解 关键词:两阶
    MATLAB代码:基于列约束生成法CCG的两阶段问题求解关键词:两阶段鲁棒列约束生成法CCG算法参考文档:《Solvingtwo-stagerobustoptimizationproblemsusingacolumn-and-constraintgenerationmethod》仿真平台:MATLABYALMIP+CPLEX主要内容:代码构建了两阶段鲁棒优化模型,并用文......
  • 2023-07-08 《数值优化方法》-庞丽萍,肖现涛-无约束最优化(五).md
    2023-07-08《数值优化方法》-庞丽萍,肖现涛-无约束最优化(五)数值优化方法Matlab最速下降法考虑无约束最优化问题其中是一阶连续可微的(记作),也就具有连续的一阶偏导数.最速下降法的基本思想正如其名字一样,就是在当前迭代点处寻找一个使目标函数下降最快的方向.这样的方向由......
  • 2023-07-08 《数值优化方法》-庞丽萍,肖现涛-无约束最优化(四).md
    2023-07-08《数值优化方法》-庞丽萍,肖现涛-无约束最优化(四)数值优化方法Matlab一维线搜索非精确线搜索ArmijoGoldsteinWolfe多维搜索前面我们学习的二分法、成功-失败法、牛顿法、抛物线法都是精确求解一维问题,其中.回到我们一开始的线搜索方法的目标是求解,如果我们不求解当......
  • 2023-07-07 《数值优化方法》-庞丽萍,肖现涛-无约束最优化(三).md
    2023-07-07《数值优化方法》-庞丽萍,肖现涛-无约束最优化(三)数值优化方法Matlab一维线搜索牛顿法抛物线法非精确线搜索1.牛顿法书接上回,对于一维最优化问题,牛顿法是在迭代点处进行二次泰勒展开来近似原函数,然后求泰勒展开式的极小点,具体如下设为当前迭代点,在处的二阶泰勒......
  • 数据代码分享|R语言用CHAID决策树分析花卉栽培影响因素数据可视化、误差分析
    在植物学和农业科学领域,理解影响植物生长和花朵产生的因素对于提高生产效率和优化栽培方法具有重要意义。因此,对于一个包含多个变量的数据集进行全面的分析和可视化是非常有帮助的。本研究基于一个数据集,该数据集包含了花卉栽培过程中的多种变量,其中包括数值型变量(如花朵数量、......
  • 差分学习笔记与总结
    差分学习笔记与总结目录差分一维差分What背景\(b_1\)的值\(b_2\)的值\(b_3\)的值\(b_i\)的值怎么用作用1作用2模板例题link题目大意CODE二维差分What作用模板模板题题目大意CODE差分前置知识-前缀和一维差分What差分可理解为前缀和的逆运算前缀和背景现有数......
  • 2023-07-06 《数值优化方法》-庞丽萍,肖现涛-无约束最优化(一).md
    2023-07-06《数值优化方法》-庞丽萍,肖现涛-无约束最优化(一)数值优化方法Matlab优化概述形如的问题称为无约束最优化问题,注意到上述问题是定义在上且为实值函数。对于上述优化问题首先需要明确的是最优解的概念。定义1.1若对任意,不等式成立,则称是优化问题的全局极小解(或全......