摘要: 求出平均数sum,对于大于sum的点连接(s,i,a[i] sum,0),表示这个点可以流出多余的部分,对于小于sum的点连接(i,t,sum a[i],0)表示这个点可以接受少的部分,然后每个点向相邻的两个点连(i,j,inf,1)表示可以任意转移,每转移一份产生1费用,注意这是个环所以首尾相连。 阅读全文
posted @ 2018-02-11 14:02 lokiii 阅读(109) 评论(0) 推荐(0) 编辑
摘要: s向仓库i连ins(s,i,a[i],0),商店向t连ins(i+m,t,b[i],0),商店和仓库之间连ins(i,j+m,inf,c[i][j])。建两次图分别跑最小费用最大流和最大费用最大流即可。 cpp include include include include using namesp 阅读全文
posted @ 2018-02-11 13:43 lokiii 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 其实KM更快……但是这道题不卡,所以用了简单粗暴的费用流,建图非常简单,s向所有人连流量为1费用为0的边来限制流量,所有工作向t连流量为1费用为0的边,然后对应的人和工作连(i,j,1,cij),跑一遍最小费用最大流再跑一遍最大费用最大流即可。方便起见直接重建图了。 cpp include incl 阅读全文
posted @ 2018-02-11 13:26 lokiii 阅读(353) 评论(0) 推荐(0) 编辑
摘要: 第一问:因为每个点只能经过一次,所以拆点限制流量,建(i,i',1,val[i]),然后s向第一行建(s,i,1,0),表示每个点只能出发一次,然后最后一行连向汇点(i',t,1,0),跑最大费用最大流 第二问:没有点经过次数的限制所以不用拆点,s向第一行建(s,i,1,0),然后最后一行连向汇点( 阅读全文
posted @ 2018-02-11 13:10 lokiii 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 和火星那个有点像,但是这个价值直接在路径上,不用拆点,对于每条价值为w的边(i,j),连接(i,j,1,w)(i,j,inf,0),表示价值只能取一次,然后连接源点和所有出发点(s,i,k,0),所有终点和t(i,t,r,0),然后跑最大费用最大流即可。 cpp include include in 阅读全文
posted @ 2018-02-11 07:41 lokiii 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 注意: 一个点可能有多把钥匙,所以把每个点有钥匙的情况状压一下 两个点之间有障碍的情况只给出了单向,存的时候记得存一下反向 b[i][j]表示当前点拥有钥匙的状态,g[x1][y1][x2][y2]表示两点之间门的类型(0表示没有, 1表示墙比较方便),f[i][j][k]表示点(i,j)在拥有k状 阅读全文
posted @ 2018-02-10 20:56 lokiii 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 分层图,建k层,设(i,j,0)为点(i,j)的满油状态,全图的流量都是1,因为重复走到一个点没有意义。如果当前点是加油站,那么它向它上左的点连费用为a的边,向下右连费用为a+b的边; 否则,这个点的所有层向零层连费用为a+c的边表示建加油站和加油,其他的当前点是加油站的情况连即可,但是不用加a。然 阅读全文
posted @ 2018-02-10 18:55 lokiii 阅读(221) 评论(0) 推荐(0) 编辑
摘要: pre:http://www.cnblogs.com/lokiii/p/8435499.html 和最长k可重区间集问题差不多,也就是价值的计算方法不一样,但是注意这里可能会有x0==x1的情况也就是l==r的情况,然后就TTTTTLE。 其实处理方法很粗暴,因为是开线段,所以可以把它扩大一倍,然后 阅读全文
posted @ 2018-02-10 10:41 lokiii 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 同 poj 3680 https:www.cnblogs.com/lokiii/p/8413139.html cpp include include include include include using namespace std; const int N=1000005,inf=1e9; i 阅读全文
posted @ 2018-02-09 14:59 lokiii 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 首先能显然的想到一个方法:(s,a1,an)(a2,t,an)(s,b1,bn)(b2,t,bn)然后图中的边正常连,危桥流量1,正常桥流量为inf。但是这样即使满流了也会有一些问题,就是流是从a1到b2的。解决方法是交换b1和b2,再跑一遍,这样以来如果再次满流,那么就意味着a1,a2,b1,b2 阅读全文
posted @ 2018-02-08 22:26 lokiii 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 输出方案好麻烦啊 拆点,石头的连(i,i',1,1)(i,i',inf,0)表示可以取一次价值1,空地直接连(i,i',inf,0),对于能走到的两个格子(不包括障碍),连接(i',j,inf,0),然后连接s和起点,终点和t,流量为探测车的数量。然后跑最大费用最大流。 关于输出方案,dfs即可,每 阅读全文
posted @ 2018-02-08 15:03 lokiii 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 同方格取数问题:https://www.cnblogs.com/lokiii/p/8430720.html 记得把障碍点去掉,不连边也不计入sum cpp include include include include using namespace std; const int N=100005, 阅读全文
posted @ 2018-02-08 12:02 lokiii 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 因为都是正整数,所以当然取得越多越好。先把所有点权加起来,黑白染色后,s向所有黑点连流量为点权的边,所有白点向t连流量为点权的边,然后黑点向相邻的四个白点连流量为inf的边,表示不可割,这样一来,对于一条链上的s u v t,只能割掉u的点权或者v的点权,那么最小割就是用最小的代价是st分开,也就是 阅读全文
posted @ 2018-02-08 11:19 lokiii 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 参考:http://blog.csdn.net/w_yqts/article/details/76037315 把相同符号的连续数字加起来,合并后ans先贪心的加上所有正数,如果正数个数sum m,设计二元组(i,a[i])表示合并后序列i位置上值为a,记录前驱后继,塞进按绝对值排序的小根堆里。每次 阅读全文
posted @ 2018-02-08 09:53 lokiii 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 参考:http://blog.csdn.net/Regina8023/article/details/44158947 神奇的做法。题意相当于若干个数取不相邻的k个使最小。先把数组差分,len表示这段空的长度。设二元组(i,len[i]),开一个小根堆把二元组塞进去,以len排序。每次取出一个二元组 阅读全文
posted @ 2018-02-07 22:54 lokiii 阅读(253) 评论(1) 推荐(0) 编辑
摘要: 记得cnt=1!!因为是无向图所以可以把回来的路看成另一条向东的路。字符串用map处理即可。拆点限制流量,除了1和n是(i,i+n,2)表示可以经过两次,其他点都拆成(i,i+n,1),费用设为1,原图中的边(i,j)连接(i+n,j,1),注意特判掉i==q&&j==nst直接相连的情况,流量要设 阅读全文
posted @ 2018-02-07 21:43 lokiii 阅读(199) 评论(0) 推荐(0) 编辑
摘要: (x,y,z)表示格子(x,y)的值为z,也就是x行+y列加的次数等于z,相当于差分约束的条件,用dfs判断冲突即可。 cpp include include include using namespace std; const int N=2005; int T,n,m,k,cnt,p,h[N], 阅读全文
posted @ 2018-02-07 15:27 lokiii 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 死于开小数组的WA?! 第一问n方dp瞎搞一下就成,f[i]记录以i结尾的最长不下降子序列。记答案为mx 第二问网络流,拆点限制流量,s向所有f[i]为1的点建(s,i,1),所有f[i]为mx(i+n,t,1),然后对于j include include include using namespa 阅读全文
posted @ 2018-02-07 10:05 lokiii 阅读(155) 评论(0) 推荐(0) 编辑
摘要: s向所有单位连流量为人数的边,所有饭桌向t连流量为饭桌容量的边,每个单位向每个饭桌连容量为1的边表示这个饭桌只能坐这个单位的一个人。跑dinic如果小于总人数则无解,否则对于每个单位for与它相连、满流、另一端不是s的点则是最终方案 cpp include include include inclu 阅读全文
posted @ 2018-02-06 22:58 lokiii 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 经典二分图匹配问题。把每个点拆成两个,对于原图中的每一条边(i,j)连接(i,j+n),最小路径覆盖就是点数n 二分图最大匹配。方案直接顺着匹配dsf。。 cpp include include using namespace std; const int N=505,M=120005; int n 阅读全文
posted @ 2018-02-06 22:05 lokiii 阅读(280) 评论(0) 推荐(0) 编辑
摘要: s向所有类别属性连流量为当前类别属性需要的个数的边,所有题目向t连流量为1的边(表示只能选一次),所有属性向含有它的题连容量为1的边。跑一变dinic,结果小于m则无解,否则看每一个类别属性连出去的题目的边是否满流,满流代表这个属性选择这道题 cpp include include include 阅读全文
posted @ 2018-02-06 20:18 lokiii 阅读(255) 评论(0) 推荐(0) 编辑
摘要: ……一道难在读入的题。 最后解决方案直接getline一行然后是把读优拆掉放进函数,虽然很丑但是过了。 然后就是裸的最大权闭合子图了,把仪器当成负权点向t连流量为其价格的边,s向实验连流量为实验报酬的边,实验向所有它所需要的仪器连流量为inf的边表示不可割断。然后跑最大流即可。 关于输出方案,直接看 阅读全文
posted @ 2018-02-06 14:33 lokiii 阅读(121) 评论(0) 推荐(0) 编辑
摘要: …为什么最短路的题会出现在网络流24里?? 因为范围是15所以直接把每个状态作为一个点,向它能转移到的点连有向边即可。可以不用建图(据说建图存不下?),直接枚举m个转移方案。位运算比较麻烦注意不要写错。 阅读全文
posted @ 2018-02-06 11:28 lokiii 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 判无解的方法非常粗暴:快T了还是没有合法方案,就是无解。 然后枚举答案,对于每一天都建一套太空站,s连地球,t连月球,上一天的太空站连向这一天的太空站,流量均为inf。然后对于每个飞船,上一天的停靠站向这一天的停靠站连边,流量为p。每次新增一天都新建一套,然后跑一次dinic加给tot,等tot = 阅读全文
posted @ 2018-02-06 11:25 lokiii 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 建图细节比较多,对于每个点i,拆成i和i',i表示用的餐巾,i'表示脏餐巾,连接: (s,i,r[i],p)表示在这一天买新餐巾 (i,t,r[i],0)表示这一天用了r[i]的餐巾 (s,i+n,r[i],0)表示这一天有r[i]条脏餐巾 if(i+ft include include inclu 阅读全文
posted @ 2018-02-04 22:31 lokiii 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 对于ai==0连接(i,t,1,0),对于ai 1(s,i,ai 1,0),然后对以相邻的两个点(i,j)连接(i,j,inf,1),注意这里是一个环的形式,所以1和n+1相连 阅读全文
posted @ 2018-02-04 20:50 lokiii 阅读(98) 评论(0) 推荐(0) 编辑
摘要: 比较神奇的建图。首先把点离散化成n的级别有m个,设s=0,t=m+1,然后i从0到m连接(i,i+1,k,0),对于区间(ai,bi)连接(ai',bi',1, wi)。 这样建图显然增广路最多只有k条,因为同一条增广路上选择的区间是不会重叠的,不同增广路上选择的区间是一定有重叠的,所以保证了最多重 阅读全文
posted @ 2018-02-04 14:36 lokiii 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 参考:https://www.cnblogs.com/CQzhangyu/p/7071477.html 神奇的点分治序(或者叫点剖?)。就是把点分治扫过的点依次放进队列里,然后发现,对于每一棵树摊到序列上,每个点的值v是重心到这个点的距离,那么对序列上的每个点定义l为这个子树重心在序列上的位置,r为 阅读全文
posted @ 2018-02-04 11:35 lokiii 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 设计一个五元组(i,l,r,p,v),表示在以i为左端点,右端点落在(l,r)中的情况下,取最大值v时右端点落在p。把这个五元组塞到优先队列里,以v排序,每次取出一个,然后把这个取过的五元组分成两个(i,l,p 1,p',v')(i,p+1,r,p'',v'')塞回去。 关于如何确定v和p,先求前缀 阅读全文
posted @ 2018-02-03 09:35 lokiii 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 直接建图比较显然,是(s,i,w),(i,t,b),(i,i',p),(i,j,inf),然而建出来之后发现边数是n方级别的,显然跑不过去,然后就有一种比较神的思路:把a离散了建一棵权值线段树,然后要连的j直接放到一个区间内。然而题目又要求j include include include incl 阅读全文
posted @ 2018-02-02 15:27 lokiii 阅读(157) 评论(0) 推荐(0) 编辑