洛谷题目传送门 差分约束模板题,等于双向连0边,小于等于单向连0边,小于单向连1边,我太蒻了,总喜欢正边权跑最长路...... 看遍了讨论版,我是真的不敢再入复杂度有点超级伪的SPFA的坑了 为了保证复杂度,需要缩点后用拓扑排序统计答案.首先全相等的点本质上是相同的,可以缩到一起,所以先来一波Tarjan把0环全缩起来.接着再考虑边权为1的边.如果这时候还出现了环(包括缩点以后的自环),一定是不存在方案的,这是可以用拓扑排序判断.否则,就是个DAG,拓扑排序也可以直接计算出答案. 统计答案要注意…
P3275 [SCOI2011]糖果 差分约束模板题,基本思路就是$d[v]+w[v,u]<=d[u]$,$Spfa$更新方法, 有点套路的是要建立原点,即图中不存在的点来向每个点加边,但同样这是必须的,因为这样做是有意义的,每个小朋友必须要有一颗糖果 #include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<queue> #define…
BZOJ 差分约束: 我是谁,差分约束是啥,这是哪 太真实了= = 插个广告:这里有差分约束详解. 记\(r_i\)为第\(i\)行整体加了多少的权值,\(c_i\)为第\(i\)列整体加了多少权值,那么限制\((i,j),k\)就是\(r_i+c_j=k\). 这就是差分约束裸题了.\(r_i+c_j=k\Rightarrow r_i-(-c_j)\leq k\ \&\&\ -c_j-r_i\leq -k\). 注意形式是\(x_j-x_i\leq w\)=v= 建边跑最短路判负环即可.…
King Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11946   Accepted: 4365 Description 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 kin…
题目描述 幼儿园里有 $N$ 个小朋友,$lxhgww $老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候,$lxhgww$ 需要满足小朋友们的 $K$ 个要求.幼儿园的糖果总是有限的,$lxhgww$ 想知道他至少需要准备多少个糖果,才能使得每个小朋友都能够分到糖果,并且满足小朋友们所有的要求. 输入输出格式 输入格式: 输入的第一行是两个整数 $N$,$K$.接下来 $K$ …
题目传送门 糖果 题目描述 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候,lxhgww需要满足小朋友们的K个要求.幼儿园的糖果总是有限的,lxhgww想知道他至少需要准备多少个糖果,才能使得每个小朋友都能够分到糖果,并且满足小朋友们所有的要求. 输入输出格式 输入格式: 输入的第一行是两个整数N,K.接下来K行,表示这些点需要满足的关系,每行…
来补一下自己很久以前那个很蒟蒻很蒟蒻的自己没有学懂的知识 差分约束,说白了就是利用我们在求最短路的一个\(relax\)操作时的判断的原理 \[dis[v]>dis[u]+disj(u,v)\] 然后题目中一般会给你一堆不等关系,我们就可以将他们转化成一个点一个点之间的约束关系 然后,这种东西就可以做啦 然后再来说一下这道题目 题目要求,对于给定的\(A,B,C\),使得 \[B-A<=C\] 然后我们发现,这不就是一道裸题吗 于是就可以愉快的码代码了 然后,再提醒一句,由于本题数据过于毒瘤,…
一道条件非常多的差分约束 把\( a < b \)转化为\( a-b \le -1\)就可做了 \( a>b \)的情况同理 若有负环则无解输出-1 注意本题中要求每个人都有糖果 所以假设一个源点\( d_{0} \),使\( d_{i}-d_{0} \ge 1 \  , \ (1 \le i \le n) \) 另外,本题要求得是最小值 \( x_{i}-x_{j} \le a_{k} \)的形式求出的是最大值 要转化成 \( x_{j}-x_{i} \ge a_{k} \)的形式求解最小值…
题目链接: https://www.luogu.org/problemnew/show/P3275 分析: 本题就是一个裸的差分约束. 核心: x=1x=1x=1时,a=b,a−>b,b−>aa=b,a->b,b->aa=b,a−>b,b−>a,连边权值为000 x=2x=2x=2时,a<ba<ba<b,此时我们用整数这个性质,于是可知a≤b−1a\leq b-1a≤b−1,a−>ba->ba−>b,权值为111 x=3x=3x=3时…
差分约束大坑题 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #define re register int #define ll long long #define MAXN 100000+10 using namespace std; int n,m; int b[MAXN]; ll d[MAXN]; *MAXN],to[*MAXN],vl[*MAXN],…
题目链接 题解 差分约束 学过的应该都会做 不会的自行百度,这里不多讲 opt=1 连一条长度为0的双向边 opt=2 (u->v) \(len=-1\) opt=3 (v->u) \(len=0\) opt=4 (v->u) \(len=-1\) opt=5 (u->v) \(len=0\) 0到其他点都连一条长度为-1的边(从n到1连玄学的力量, 正着加边会T) 然后spfa最短路即可 Code #include<bits/stdc++.h> #define LL…
Code: #include<cstdio> #include<queue> #include<algorithm> using namespace std; const int N=300000+3; const int INF=-2333233; queue<int>Q; int d[N],inq[N],times[N]; int head[N],to[N<<1],val[N<<1],nex[N<<1]; int cn…
BZOJ原题链接 洛谷原题链接 很明显的差分约束,但数据范围较大,朴素\(SPFA\)判正环求解会\(T\)(理论上如此,但我看到有挺多人用朴素的还跑得挺快..),所以需要优化. 我们所建立的有向图中所有边的权值只有\(0\)或\(1\),而且若图中有环,那么环上所有边的权值必须为\(0\),否则无解. 所以我们可以用\(tarjan\)找强连通分量并判断每个强连通分量有没有包含权值为\(1\)的边,有则无解. 若有解,就进行缩点,最后得到一张\(DAG\),直接跑\(SPFA\)即可(也可按拓…
[bzoj2330]: [SCOI2011]糖果 恩..就是裸的差分约束.. x=1 -> (A,B,0) (B,A,0) x=2 -> (A,B,1)  [这个情况加个A==B无解的要特判] x=3 -> (B,A,0)  [恩这个是不少于一开始zz建反了] x=4 -> (B,A,1) x=5 -> (A,B,0) 然后源点到所有点建1的边[恩据说有条链所以要反着连]跑最长路就好了 /* http://www.cnblogs.com/karl07/ */ #include…
http://www.lydsy.com/JudgeOnline/problem.php?id=2330 差分约束运用了最短路中的三角形不等式,即d[v]<=d[u]+w(u, v),当然,最长路的话变形就行了,即d[v]>=d[u]+w(u, v). 我们根据本题给的约束可以构造这样的不等式(因为最短路的话是负数,很不好判断,如果化成最长路,就都是正数了): 首先所有的人都满足,d[i]>=1 按照输入a和b d[a]==d[b],有 d[a]-d[b]>=0, d[b]-d[a…
懒得复制,戳我戳我 Solution: 首先考虑\(X=1\)的情况,我们其实只用用一下并查集把相等的点合为一个点 然后后面的四个式子我们就可以用差分约束了,就拿\(X=2\)的情况来说吧,我们用\(S[i]\)表示\(i\)号小朋友要拿多少糖果,如果X=2, 表示第A个小朋友分到的糖果必须少于第B个小朋友分到的糖果,我们就可以写出式子\(S[A]<S[B]\),等价于\(S[A]+1<=S[B]\),这样我们就可以从\(A\)向\(B\)连一条权值为\(1\)的边.另外,如果是\(S[A]&…
BZOJ2330 SCOI2011 糖果 Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候,lxhgww需要满足小朋友们的K个要求.幼儿园的糖果总是有限的,lxhgww想知道他至少需要准备多少个糖果,才能使得每个小朋友都能够分到糖果,并且满足小朋友们所有的要求. Input 输入的第一行是两个整数N,K. 接下来K行,表示…
题目戳这里 N句话题意 有N个人,k个限制,有五种限制 如果X=1, 表示第A个小朋友的糖果必须和第B个小朋友的糖果一样多: 如果X=2, 表示第A个小朋友的糖果必须少于第B个小朋友的糖果: 如果X=3, 表示第A个小朋友的糖果必须不少于第B个小朋友的糖果: 如果X=4, 表示第A个小朋友的糖果必须多于第B个小朋友的糖果: 如果X=5, 表示第A个小朋友的糖果必须不多于第B个小朋友的糖果: 求满足所有要求需要最少的糖果数(每个人至少为1) Solution 一个差分约束题目,然额本蒟蒻还不是很会…
题目大意:维护 M 个差分约束关系,问是否可以满足所有约束,如果满足输出一组解.\(N<=1e5\) 题解:差分约束模型可以通过构建一张有向图来求解.是否满足所有约束可以利用 spfa 进行判断,但是这道题数据范围是 1e5,spfa 很可能会被卡.重新考虑无解的情况,若满足最短路约束,则图中存在负环无解,最长路约束的情况则是存在正环无解.可以利用这一性质,对整个有向图进行 scc 缩点,若一个强连通分量中的边权和大于 0,则无解.缩点之后,在 DAG 上执行 dp 即可求得一组符合条件的解.…
差分约束裸题,a==b的话分别建a>=b a<=b的边就行.倒序加边不然会TLE是什么鬼 #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #define ll long long using namespace std; ,inf=1e9; struct poi{int too,pre,sum;}e[maxn]; int n,m,x,y,z,front…
题目链接 差分约束. 设\(s[i]\)表示前\(i\)个位置有多少个数,那么对于一个限制条件\((L,R,C)\),显然有 \[s[R]-s[L-1]>=C\] 于是连一条\(L-1\)到\(R\)边权为\(C\)的边. 但为了保证能从\(0\)走到\(max(b)\),我们还需从\(1\)到\(n\),对\(i-1\)和\(i\)连一条权为\(0\)的边,对\(i\)和\(i-1\)连一条权为\(-1\)的边, 这也很好理解,因为 \[s[i]-s[i-1]>=0,s[i-1]-s[i]&…
传送门 差分约束裸题 但是坑! 有一个点是长为10W的链,需要逆序加边才能过(真是玄学) 还有各种坑爹数据 开longlong ——代码 #include <cstdio> #include <cstring> #include <iostream> #define N 200001 int n, k, cnt; long long ans, dis[N]; ], val[N << ], next[N << ]; bool vis[N]; inl…
第一次看这个题目,完全不知道怎么做,看起来又像是可以建个图进行搜索,但题目条件就给了你几个不等式,这是怎么个做法...之后google了下才知道还有个差分约束这样的东西,能够把不等式化成图,要求某个点在满足所有不等式的情况下的最大取值,只需对建好的图进行一次最短路即可 不过要使得a b 点满足这样 a<=b+k这种不等式,还得对题目所给的不等式进行下改装 原不等式无非就是 输入个 si ni,使得存在 A(si)+...A(si+ni)<k 或者 >k,我们新定义一个s[],s[i]代表…
传送门 差分约束系统..找负环用spfa就行 ——代码 #include <cstdio> #include <cstring> #include <iostream> #define N 100001 int n, m, cnt; ], val[N << ], next[N << ], dis[N]; bool vis[N]; inline int read() { , f = ; char ch = getchar(); ; ) + (x &…
题目描述 造一幢大楼是一项艰巨的工程,它是由n个子任务构成的,给它们分别编号1,2,…,n(5≤n≤1000).由于对一些任务的起始条件有着严格的限制,所以每个任务的起始时间T1,T2,…,Tn并不是很容易确定的(但这些起始时间都是非负整数,因为它们必须在整个工程开始后启动).例如:挖掘完成后,紧接着就要打地基:但是混凝土浇筑完成后,却要等待一段时间再去掉模板. 这种要求就可以用M(5≤m≤5000)个不等式表示,不等式形如Ti-Tj≤b代表i和j的起始时间必须满足的条件.每个不等式的右边都是一…
逆序建超级源快十倍还行 #include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #include <cmath> #define R(a,b,c) for(register int a = (b); (a) <= (c); ++(a)) #define nR(a,b,c) for(register int a = (b); (a) >=…
学习完了差分约束是否有解, 现在我们学习求解最大解和最小解 首先我们回想一下是否有解的求解过程, 不难发现最后跑出来任意两点的最短路关系即为这两元素的最短路关系. 即: 最后的最短路蕴含了所有元素之间的约束关系 好的了解了这点, 我们可以想到, 既然我们知道了元素之间的约束关系, 确定了一个元素的值, 不就确定了全部元素的极值了吗? 求解时, 经常地把源点的值设为 一个特定的值 ,让源点变为基础点, 来拓展其他的点的值.这就是差分约束系统元素极值的大致求解思路了 还有一点需要注意, (哪里写的都…
2021.07.23 P3275 糖果(差分约束) [P3275 SCOI2011]糖果 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.为了满足更多更多约束条件,合适地选择最长路或最短路(我个憨憨,强行最短路,因此还加了负号) 题意: k个约束条件,求满足所有约束条件并且每个点的值都大于0的每个点点权之和的最小值. 分析: v(A,B)为从A到B的边权的值,且A点点权小于B.为了让点权之和最小,强行要求A>=B||A<=B为A==B.为了满足更多约束条件,跑最长…
[luogu P3275] [SCOI2011]糖果 题目描述 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候,lxhgww需要满足小朋友们的K个要求.幼儿园的糖果总是有限的,lxhgww想知道他至少需要准备多少个糖果,才能使得每个小朋友都能够分到糖果,并且满足小朋友们所有的要求. 输入输出格式 输入格式: 输入的第一行是两个整数N,K.接下来…
BZOJ_3436_小K的农场_差分约束 题意: 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得 一些含糊的信息(共m个),以下列三种形式描述:农场a比农场b至少多种植了c个单位的作物,农场a比农场b至多 多种植了c个单位的作物,农场a与农场b种植的作物数一样多.但是,由于小K的记忆有些偏差,所以他想要知道存 不存在一种情况,使得农场的种植作物数量与他记忆中的所有信息吻合.   分析: 差分约束 对于1操作,b->a:c 对于2操作,a-…