差分约束详解&&洛谷SCOI2011糖果题解
差分约束系统:
如果一个系统由n个变量和m个约束条件组成,形成m个形如ai-aj≤k的不等式(i,j∈[1,n],k为常数),则称其为差分约束系统(system of difference constraints)。亦即,差分约束系统是求解关于一组变量的特殊不等式组的方法。
——度娘。
然而并没有看懂。。
通俗来说,满足差分约束的条件是题目中给了你多个ai-aj<=(>=,<,>之类)的条件,要求同时满足这些条件并求极值的问题。
内么,怎么同时满足这些问题呢?
假如我们以这个东西为例:
a2<a1,a2<a3,a3<a1。并要求同时满足求满足条件的a的和的最小值。(a>=0)
那么,我们可以用图来描述这个问题:
我们设有向边(u,v),边权为1表示u>v。因为u>v等价于u-1>=v,也就是u-v>=1,那么我们就将(u,v),权值i理解为u-v=i。
画出来图长这样:

要满足所有条件且最小,也就是满足a1-a2=1,a1-a3+(a3-a2)=2。
整理得:a1-a2=1;a1-a2=2;
取最大的那个。
在图上表示,就(莫名其妙的)变成了求最长路!
很神奇吧qwq。
也就是说,如果你想满足所有条件,就先建图,然后根据题目情况(最短路求得未知数最大,最长路求得未知数最小)来跑最长/短路。
例题:SCOI2011糖果:
跑最长路qwq:
code:
#include<cstdio>
#include<cstring>
#include<queue>
#include<iostream>
#include<cstdlib>
using namespace std; int n,k,x,a,b,sum=,head[],cnt[],dis[];
long long ans=;
queue<int> q;
bool vis[]; inline int read()
{
int ans=;
char ch=getchar(),last=' ';
while(ch>''||ch<'')last=ch,ch=getchar();
while(ch>=''&&ch<='')ans=(ans<<)+(ans<<)+ch-'',ch=getchar();
return last=='-'?-ans:ans;
} struct edge{
int next,to,dis;
}edg[]; inline void add(int from,int to,int dis)
{
edg[++sum].dis=dis;
edg[sum].to=to;
edg[sum].next=head[from];
head[from]=sum;
} int main(){
n=read();k=read();
for(int i=;i<=k;i++)
{
x=read(),a=read(),b=read();
if(x==){
add(a,b,);add(b,a,);
}
if(x==){
if(a==b){
printf("-1");return ;
}
add(a,b,);
}
if(x==){
add(b,a,);
}
if(x==){
if(a==b){cout<<-;return ;}
add(b,a,);
}
if(x==){
add(a,b,);
}
}
for(int i=;i<=n;i++)add(,i,);
vis[]=;q.push();
while(!q.empty()){
int now=q.front();q.pop();vis[now]=;
if(cnt[now]==n-){
printf("-1");return ;
}
cnt[now]++;
for(int i=head[now];i;i=edg[i].next)
{
int v=edg[i].to;
if(dis[v]<dis[now]+edg[i].dis){
dis[v]=dis[now]+edg[i].dis;
if(!vis[v])vis[v]=;q.push(v);
}
}
}
for(int i=;i<=n;i++)
{
ans+=dis[i];
}
printf("%lld\n",ans);
}
完结qwq
差分约束详解&&洛谷SCOI2011糖果题解的更多相关文章
- [poj 1364]King[差分约束详解(续篇)][超级源点][SPFA][Bellman-Ford]
题意 有n个数的序列, 下标为[1.. N ], 限制条件为: 下标从 si 到 si+ni 的项求和 < 或 > ki. 一共有m个限制条件. 问是否存在满足条件的序列. 思路 转化为差 ...
- [poj 3159]Candies[差分约束详解][朴素的考虑法]
题意 编号为 1..N 的人, 每人有一个数; 需要满足 dj - di <= c 求1号的数与N号的数的最大差值.(略坑: 1 一定要比 N 大的...difference...不是" ...
- 绝对是全网最好的Splay 入门详解——洛谷P3369&BZOJ3224: Tyvj 1728 普通平衡树 包教包会
平衡树是什么东西想必我就不用说太多了吧. 百度百科: 一个月之前的某天晚上,yuli巨佬为我们初步讲解了Splay,当时接触到了平衡树里的旋转等各种骚操作,感觉非常厉害.而第二天我调Splay的模板竟 ...
- 1_03_MSSQL课程_约束详解
复习: ->创建数据库的SQL:******** create database 数据库名 on ( name=‘’, size=5MB, filegrowth=2MB, filename=&q ...
- 洛谷NOIp热身赛题解
洛谷NOIp热身赛题解 A 最大差值 简单树状数组,维护区间和.区间平方和,方差按照给的公式算就行了 #include<bits/stdc++.h> #define il inline # ...
- 洛谷P2827 蚯蚓 题解
洛谷P2827 蚯蚓 题解 题目描述 本题中,我们将用符号 ⌊c⌋ 表示对 c 向下取整. 蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓. 蛐蛐国里现 ...
- 洛谷P1816 忠诚 题解
洛谷P1816 忠诚 题解 题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人 ...
- 洛谷P3275 [SCOI2011]糖果 题解
题目链接: https://www.luogu.org/problemnew/show/P3275 分析: 本题就是一个裸的差分约束. 核心: x=1x=1x=1时,a=b,a−>b,b−> ...
- 转自 void- man 差分约束系统详解
一直不知道差分约束是什么类型题目,最近在写最短路问题就顺带看了下,原来就是给出一些形如x-y<=b不等式的约束,问你是否满足有解的问题 好神奇的是这类问题竟然可以转换成图论里的最短路径问题,下面 ...
随机推荐
- mysql主主、mysql-proxy读写分离、keepalived高可用完美组合
配置mysql主主复制 服务器A:172.16.100.9 服务器B:172.16.100.10 首先在服务器A和服务器B上各安装好单机版mysql5.7,安装好后,再继续下面的操作. 在服务器A和服 ...
- CSS - Animate动画
下载地址:https://daneden.github.io/animate.css/ 关键CSS样式:animate.css 引入CSS样式 <link rel="styleshee ...
- Oracle的基本操作-修改表结构、数据的增删改查
创建一个person表 create table person( pid ), pname ) ); 添加一列 ); 修改列类型 ); 修改列名称 alter table person rename ...
- HORSE PILL--一种新型的linux rootkit
资料 ppt:https://www.blackhat.com/docs/us-16/materials/us-16-Leibowitz-Horse-Pill-A-New-Type-Of-Linux- ...
- Censoring(栈+KMP)
# 10048. 「一本通 2.2 练习 4」Censoring [题目描述] 给出两个字符串 $S$ 和 $T$,每次从前往后找到 $S$ 的一个子串 $A=T$ 并将其删除,空缺位依次向前补齐,重 ...
- Linxu-mysql5.7源码安装
Mysql5.7 Linux安装教程 1系统约定安装文件下载目录:/data/softwareMysql目录安装位置:/usr/local/mysql数据库保存位置:/data/mysql日志保存位置 ...
- Jmeter之cookie登录
1.在web登录时,抓取登录的响应头 2.在jmeter中配置cookie HTTP Cookie管理器中添加信息 以下三个字段是必填的 3.添加HTTP请求(直接访问首页) 如果返回成功,并且响应内 ...
- nginx-host
下载nginx镜像 docker pull docker.io/nginx:latest 由于calico网络不支持http协议,所以即使你在iptables中配置了nat路由,将访问宿主机80端口的 ...
- .Net高级工程师面试题
----------高级开发工程师岗位职责: 1.完成平台系统新功能模块开发,维护现有产品,独立地设计.开发.实现和测试关键系统: 2.负责公司项目核心代码的编写: 3.根据产品需求进行业务功能的开发 ...
- MySQL mysql-5.7.21-winx64.zip安装指南
一.下载mysql-5.7.21-winx64.zip压缩包 二.解压 1.在目录mysql-5.7.21-winx64下新建data文件夹 !!!如果已经存在data文件夹,请删除其中ib_logf ...