题意:        给你n个点,然后给你两种情况,P a b c,表明a在b的北边c那么远,V a b 表明a在b的北边(距离最少是1),问你这些条件是否冲突. 思路:       一开始想用带权并查集,先处理P在处理V,想想感觉不对,还是查分约束吧,查分约束处理这个题时间和建图都简单,首先查分约束是根据最短路(或最长路)的不等式关系建图的,给你一个图,跑完最短路对于边<a ,b> 会有dis[b] <= dis[a] + map[a][b]; 则 dis[b] - dis[a] &l…
链接1275Cashier Employment 题目大意就是说有一些人来应聘一个超级市场的工作,每个人的应聘的起始时间在0~23时之间,而超市在时间i需要R[i]个工作人员,而每个人的工作时间都是8小时,问最少需要多少人使得超市一天24小时满足超市的工作人数的需要. 设工作时间为1~24时,S[i]表示前i个小时所需要的工作人数的最小值,那么结果就可以表示成0为起点,24为终点的最短路.下面是约束不等式: 0<=S[i] - S[i-1]<= t[i]               (1<…
就根据题目中给的约束条件建图就行了 需要注意的是,我们要做的是最长路,因为需要约束每个点都是大于0 那么可以建一个超级源指向所有点,超级源的dis是1,边长为0 那么这样做最长路就可以了 好了我们这么写完了,之后发现re了,然后改大了点数组发现tle了.... 然后我也不知道怎么改,超级源连接所有点的时候,是for i:=1 to n do 的,这 样建完图之后,再做spfa相当于直接将n-1的点放入队列中,然后我改了下 连接的时候for i:=n downto 1 do 那么相当于将1-n放入…
/* 加深一下对查分约束的理解 建图的时候为了保证所有点联通 虚拟一个点 它与所有点相连 权值为0 然后跑SPFA判负环 这题好像要写dfs的SPFA 要不超时 比较懒 改了改重复进队的条件~ */ #include<iostream> #include<cstdio> #include<cstring> #include<queue> #define maxn 40010 using namespace std; int n,m,num,head[maxn…
/* 暴力查分 n*n */ #include<cstdio> #include<cstring> #include<iostream> #define maxn 100010 using namespace std; ],r[]; int main() { scanf("%d%d",&n,&m); ;i<=n;i++) scanf("%d",&a[i]); ;i<=n;i++) ;j<=…
/* 查分约束. 给出的约束既有>= 又有<= 这时统一化成一种 Sb-Sa>=x 建边 a到b 权值为x Sb-Sa<=y => Sa-Sb>=-y 建边 b到a 权值为-y 然后跑最短路 SPFA 判断到不了终点 判断负环的死循环. */ #include<iostream> #include<cstdio> #include<cstring> #include<queue> #define maxn 20010 us…
/* 数组开大保平安. 查分约束: 输入的时候维护st和end 设每个点取元素di个 维护元素个数前缀和s Sbi-Sai-1>=ci 即:建立一条从ai-1到bi的边 权值为ci 表示ai到bi的最小取元素个数 然后跑st到end的最长路 (建边就已经保证了最优) 最后 dis[end] 即为end的前缀和 即为st到end 符合每一个约束的最小去元素值 同时查分约束也满足性质 Sai-Sai-1>=0 Sai-1-Sai>=-1 */ #include<iostream>…
[POJ 1275] Cashier Employment(差分约束系统的建立和求解) Cashier Employment Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7569   Accepted: 2856 Description A supermarket in Tehran is open 24 hours a day every day and needs a number of cashiers to f…
特别鸣谢这段代码的源作者,我的大佬同学\(MetalkgLZH\).由于我没有做什么工作,这篇随笔基本不含相关技术细节. 再次强调,这个程序的主要部分由\(MetalkgLZH\)完成.技术细节与源码可以在他的官网(貌似正在维护)查看.这个程序与\(MetalkgLZH\).\(MiserWeyte\)(我)开发的所有后续版本遵守\(GPL~V3\)协议. Latest update 2019.10.14: 版本V2.2: 1.添加了密码错误以及网络错误时的提示: 2.成绩输出框可手动修改的bu…
Description 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价.起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边权 N<=100000 M<=200000   Input Output 那个取最大值的操作十分烦人,考虑如何将这个判断去掉. 可以用查分的方式:如果进来的边是小的,那么从大的边出去就要补齐差值. 补齐差值就直接连一条差值为 $d$ 的边即可. 然后跑一个 $Dijkstra$ 即可. #incl…