差分约束系统

【基础算法】【ACM】差分约束系统与最短路算法 朴素差分约束系统的求解 朴素的差分约束系统是一个不等式组的集合,集合中每一个不等式都形如Ai – Aj <= Xk。对差分约束系统的求解也就是要对不等式组求得任意一组或者满足某种最优性质的一组可行解。差分约束系统在各种计算机和实际的调度问题中都有应用,也可以对某些优化问题的求解提供帮助。   最朴素的差分约束系统可以将不等式组的求解转换成有向图上的单源最短路求解问题,可以利用Dijks... 阅读详情
如果一个系统由n个变量和m个约束条件组成,其中每个约束条件形如xj-xi<=bk(i,j∈[1,n],k∈[1,m]),则称其为差分约束系统(system of difference constraints)。亦即,差分约束系统是求解关于一组变量的特殊不等式组的方法。
求解差分约束系统,可以转化成图论的单源最短路径 (或最长路径)问题。
观察xj-xi<=bk,会发现它类似最短路中的三角不等式d[v]<=d[u]+w[u,v],即d[v]-d[u]<=w[u,v]。因此,以每个变量xi为结点,对于约束条件xj-xi<=bk,连接一条边(i,j),边权为bk。我们再增加一个源点s,s与所有定点相连,边权均为0。对这个图,以s为源点运行Bellman-ford算法(或SPFA算法),最终{d[ i]}即为一组可行解。
引理:设x=(x1,x2,…,xn)是差分约束系统Ax≤b的一个解,d为任意常数。则x+d=(x1+d,x2+d,…,xn+d)也是该系统Ax≤b的一个解。
bellman-ford算法伪代码:
for each v V do d[v] <-- 无限大; d[s] <-- 0
Relaxation
for i =1,...,|V|-1 do
for each edge (u,v) 属于 E do
d[v] <-- min{d[v], d[u]+w(u,v)}
Negative cycle checking
for each v 属于V do if d[v]> d[u] + w(u,v) then no solution
在实际的应用中,一般使用SPFA(Shortest Path Fast Algorithm)算法来实现。
差分约束系统中源点到每个点的距离确定
关于Dist[]的初始化化
1.如果将源点到各点的距离初始化为0,最终求出的最短路满足 它们之间相互最接近了
2.如果将源点到各点的距离初始化为INF(无穷大),其中之1为0,最终求出的最短路满足 它们与该点之间相互差值最大。
3.差分约束系统的确立要根据自己确定的约束条件,从约束点走向被约束点
连边一般有两种方法,第一种是连边后求最长路的方法,第二种是连边后求最短路的方法。
例:d[x]-d[y]>=Z
如果想连边后求最长路 那么将不等式变形为这种形式 d[x]>=d[y]+z y---x连一条权值为z的边
求最短路则变形成d[y]<=d[x]-z x---y连一条权值为-z的边。
如果是别的不等式,也可以根据情况变形。但是要保证的是 两个变量(x,y)的系数一定要是正的。而常量则不一定。

  上面是来自百度百科,其实就是由xj-xi<=k(注意有等号)建立图后判断有没有负环。因为图可能不连通,所以要再加一个原点到每个点的权值都是0(不影响原来的负环判断),这样确保图是连通的。经过bellman-ford或SPFA算法后,求出的最短路正好是满足要求的一组解。


uva515 - King

  King 

Once, in one kingdom, there was a queen and that queen was expecting a baby. The queen prayed: ``If my child was a son and if only he was a sound king.'' After nine months her child was born, and indeed, she gave birth to a nice son.

Unfortunately, as it used to happen in royal families, the son was a little retarded. After many years of study he was able just to add integer numbers and to compare whether the result is greater or less than a given integer number. In addition, the numbers had to be written in a sequence and he was able to sum just continuous subsequences of the sequence.

The old king was very unhappy of his son. But he was ready to make everything to enable his son to govern the kingdom after his death. With regards to his son's skills he decided that every problem the king had to decide about had to be presented in a form of a finite sequence of integer numbers and the decision about it would be done by stating an integer constraint (i.e. an upper or lower limit) for the sum of that sequence. In this way there was at least some hope that his son would be able to make some decisions.

After the old king died, the young king began to reign. But very soon, a lot of people became very unsatisfied with his decisions and decided to dethrone him. They tried to do it by proving that his decisions were wrong.

Therefore some conspirators presented to the young king a set of problems that he had to decide about. The set of problems was in the form of subsequences $S_i = \{a_{s_i}, a_{s_i+1}, \dots, a_{s_i+n_i}\}$ of a sequence $S = \{a_1, a_2, \dots, a_n\}$. The king thought a minute and then decided, i.e. he set for the sum $a_{s_i} + a_{s_i+1} + \dots + a_{s_i+n_i}$ of each subsequence Si an integer constraint ki (i.e. $a_{s_i} + a_{s_i+1} + \dots + a_{s_i+n_i} < k_i$ or $a_{s_i} + a_{s_i+1} + \dots + a_{s_i+n_i} > k_i$ resp.) and declared these constraints as his decisions.

After a while he realized that some of his decisions were wrong. He could not revoke the declared constraints but trying to save himself he decided to fake the sequence that he was given. He ordered to his advisors to find such a sequence S that would satisfy the constraints he set. Help the advisors of the king and write a program that decides whether such a sequence exists or not.

Input 

The input file consists of blocks of lines. Each block except the last corresponds to one set of problems and king's decisions about them. In the first line of the block there are integers n, and m where $0 < n \leŸ 100$ is length of the sequence S and $0 < m \leŸ 100$ is the number of subsequences S i. Next m lines contain particular decisions coded in the form of quadruples s i, n i, o i, k i, where o i represents operator > (coded as gt) or operator < (coded as lt) respectively. The symbols s i, n i and k i have the meaning described above. The last block consists of just one line containing 0.

Output 

The output file contains the lines corresponding to the blocks in the input file. A line contains text successful conspiracy when such a sequence does not exist. Otherwise it contains text lamentable kingdom. There is no line in the output file corresponding to the last ``null'' block of the input file.

Sample Input 

4 2
1 2 gt 0
2 2 lt 2
1 2
1 0 gt 0
1 0 lt 0
0

Sample Output 

lamentable kingdom
successful conspiracy

  Si=a(si)+a(si+1)...+a(si+ni),Si大于或小于ki。设xi=a0+a1+...+a[i],那么Si=x(ni)-x(si-1)。这样构成一个差分约束系统,只要xi都存在,Si就存在。注意共有N+2个点(x0..xn是N+1个,再建立一个原点,共N+2个),有M+N+1条边。还要注意的是如果x(ni)-x(si-1)<ki,则x(ni)-x(si-1)<=ki-1。如果x(ni)-x(si-1)>ki,则x(ni)-x(si-1)>=ki+1,也就是x(si-1)-x(ni)<=-ki-1。

#include<cstring>
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#define INF 0x3f3f3f3f
#define MAXN 220
#define pii pair<int,int>
using namespace std;
int N,M,K,d[MAXN];
struct edge{
    int u,v,d;
}e[MAXN];

void add_edge(int a,int b,int t){
    e[K].u=a;
    e[K].v=b;
    e[K++].d=t;
}
int Bellman(){
    int i,j;
    memset(d,INF,sizeof(d));
    d[N+1]=0;
    for(i=0;i<N+1;i++){
        for(j=0;j<K;j++){
            int u=e[j].u,v=e[j].v;
            if(d[u]!=INF&&d[u]+e[j].d<d[v]) d[v]=d[u]+e[j].d;
        }
    }
    for(j=0;j<K;j++){
        int u=e[j].u,v=e[j].v;
        if(d[u]!=INF&&d[u]+e[j].d<d[v]) return 1;
    }
    return 0;
}
int main(){
    freopen("in.txt","r",stdin);
    while(scanf("%d",&N),N){
        scanf("%d",&M);
        int i,a,b,t;
        char s[10];
        K=0;
        for(i=0;i<M;i++){
            scanf("%d%d%s%d",&a,&b,s,&t);
            if(s[0]=='l') add_edge(a+b,a-1,t-1);
            else add_edge(a-1,a+b,-t-1);
        }
        for(i=0;i<=N;i++) add_edge(N+1,i,0);
        if(Bellman()) printf("successful conspiracy\n");
        else printf("lamentable kingdom\n");
    }
    return 0;
}


MACS2软件进行Peak calling MACS2可以检出ChIP-Seq,ATAC-seq 以及 MeRIP-seq (RNA甲基化测序) 等富集的序列。peaks calling 有不同的方法,MACS2是最常用的call peaks工具。 MACS全称Model-based Analysis of ChIP-Seq,最初的设计是用来鉴定转录因子的结合位点,但是它也可以用于其他类型的富集方式测序。usage: macs2 [-h] [--version] {callpeak,bdgpeakcall,bdgbroadca 阅读详情

相关推荐

Hyper-V创建Ubuntu虚拟机设置固定IP

本文记录使用hyper-v创建ubuntu虚拟机,为虚拟设置固定IP且通过物理机可访问。

2622

单源最短路径

一、最短路径概念: 1、最短路路径树 在最短路径算法结束时,Gπ为最短路径树Gπ=(Vπ,Eπ) Vπ={v∈V: π[v]≠NIL}∪{s} Eπ={(π[v],v)∈E: v∈Vπ-{s}} 最短路径不一定唯一,∴最短路路径树也不一定唯一 2、松弛技术——逼近及最终达到最短路径 (基础) 引理25.1:最短路径的子路径也是最短路径 (不等式:逼近最短路径) 引理25.3:所有有向边都“...

chuanwang66的专栏 461

SAP 移动类型简述

SAP系统中用于标志物料移动(收货/发货/转储/转储记帐)的三位的数字/字母 通常分几大类:收货 发货 转储 库房调整 常用的有: 收货类 (MB1C) 101 采购订单收货 103 采购订单收货至冻结状态 122 无采购订单退货 161 按退货采购订单退货 131 从生产订单 501 无采购订单收货 511 免费收货 发货类(MB1A) 201 成本中心消耗

forever_crazy的专栏 7197

差分约束系统学习笔记

差分约束系统 一、预备知识 最短路基本性质 #define inf 0x3fffffff #define M 1005 //最大点数 struct edge{ int v, w, next; }e[10005]; //估计好有多少条边 int pre[M], cnt, dist[M], n; bool inq[M]; //注意初始化 void init (...

终有绿洲摇曳在沙漠 5569

Nmap的介绍、安装 并进行网络扫描

Nmap概述 Nmap(Network Mapper(网络映射器))是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。它是网络管理员必用的软件之一,以及用以评估网络系统安全。 正如大多数被用于网络安全的工具,nmap 也是不少黑客及骇客(又称脚本小子)爱用的工具 。系统管理员可以利用nmap来探测工作环境中未经批准使用的服务器,但是黑客会利用nmap来搜集目标电脑的网络设定,从而计划攻击的方法。

Cheney ' blog 2万+

2006NOIP普及组真题 4. 数列

从上述推理中,我们发现要输出的幂次和中的第 N 项(也就是幂次和中的序号N),对应的二进制位数和幂次和对应的二进制位数相同。当 k=3 时,k的幂次为1, 3, 9, 27, 81…,即第0位,第2位均为1,转成 k 进制(k=3)时。,即第2位,第3位均为1,转成 k 进制(k=3)时。转成 k 进制(k=3)时的幂次和为。,即第0位,第1位,第2位均为1,(即第0位,第1位,第2位均为1)N=12时,12的二进制是。(即第0位,第2位均为1)(即第2位,第3位均为1)结论:这道题就变成了。

weixin_40252159的博客 1513

【差分约束系统】总结

是求解多个不等式的合法解的算法,因以两变量之差与一常量关系的形式出现,故称作差分约束。数学形式表示如下:该算法旨在对于以上 n 个未知数,m 个不等式的不等式组求解。

cqbzliuhongyi的博客 2563

HDR视频技术之七:逆色调映射

HDR 技术说是继 4K 之后视频领域的又一次重大技术突破,不仅提高图像的动态范围,同时也提供了更宽的色域,并提升了画面在高光和暗部的细节信息,带给观看者更加真实的视觉体验。但作为 HDR 产业链的核心,内容短缺的问题仍然是 HDR 普及和成熟的重要限制因素。众多电视厂商将 HDR 技术作为其产品规划中的重要技术,主要是在硬件方面进行提升。而由于 HDR 内容制作对于设备要求较高,对采集、调色、显示等多方面都需要较高的质量要求,内容制作的复杂度和周期长等因素,导致了 HDR 内容的匮乏。

多媒体开发者 2422

详解差分约束系统

什么是差分约束系统?差分约束系统,是一类关于不等式组的线性规划问题 比如: 给出n个形如 a−b≤ca-b \le c的不等式,求一组任意解一般可以转化为最短路问题求解。差分约束系统的转化我们以 Xi−Yi≤ZiX_i-Y_i\le Z_i为例 观察发现,其实这个不等式与最短路问题中的“三角不等式”相似: Dist(i)+W(i,j)≥Dist(j)Dist(i)+W(i,j)\ge Dis

linkfqy 2034

【校园网代理连接问题】已解决,“该设备或资源(Web 代理)未设置为接受端口“7890”上的连接“

我遇到这个问题很多次。每次都是vpn的问题,不止通俗意义上的梯子(clash之类的),还包括校园网vpn。点击“ 拨号和虚拟专用网络设置”中的“设置”, 关闭代理服务器。在打开vpn后或者关闭vpn后无法浏览网页,网页诊断显示“关闭“手动设置代理”中的“使用代理服务器”,关闭对应的本地代理即可。

聆雨。 1万+

详细了解sklearn中的CountVectorizer

CountVectorizer 是 scikit-learn(一个流行的 Python 机器学习库)中的一个文本特征提取类,其核心功能是将一系列原始文本(如句子、文档)转换为基于词频(word count)的数值矩阵。它基于词袋模型(Bag of Words, BoW)思想,忽略文本的语法结构和词序,仅关注词汇在文本中出现的频率,从而将文本转化为机器可理解的数字形式。文本 1:"I love machine learning"

2302_76568160的博客 1118

浅谈差分约束系统

差分约束系统 简介: 背景是给你若干个不等式,形如xi−xj≤bxi−xj≤bxi-xj \le b,需要你判断x的解的存在性或是最优解。 而差分约束系统即为这个问题转化为一个图论问题,进而跑最短路来判环或求最值距离(最优解)。 这里转化的原理是三角不等式,即d(v)−d(u)≤cost(u,v)d(v)−d(u)≤cost(u,v)d(v)-d(u) \le cost(u,v),可以建...

Caristra的博客 2065

UCIE Specification详解(二)

UCIe架构概述。

Crazzy_M的博客 3274

差分约束系统详解

前言 差分约束系统是一种特殊的N元一次不等式组,不等式组的每一个不等式称为一个约束条件。通过不等式的变形,可以通过最短路算法对差分约束系统进行求解。 相关定义 约束条件:一个满足​的不等式称为一个约束条件 差分约束系统:一个由若干个约束条件构成的N元一次不等式组称为一个差分约束系统 性质 $i,j\in[1,n]$,$k\in [1,m...

599

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

差分约束系统总结

差分约束系统是一种特殊的N元一次不等式。它包含了N个变量x1到xN以及M个约束条件。形如xi<=xj+ck。而我们需要求出来满足所有约束条件。 而对于每个差分约束系统的约束条件,与单源最短路问题中的三角不等式d[y]<=d[x]+w,相似,此时可以将差分约束系统转化成求最短路的问题。 对于每一个约束条件xi<=xj+ck,可以建立一条从点j到i的一条边权为ck的一条有向边,然后再求最短路。 对于每一个约束条件xi>=xj+ck,可以建立一条从点j到i的一条边权为ck的一条有向边,.

weixin_44630656的博客 407

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: Bellman_Ford和Spfa两种方法判断负环
下一篇: uva104 - Arbitrage 最小转移步数
小小小小葱
博客等级 码龄14年 22粉丝 266原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值