网络流
L_0_Forever_LF
一个热爱OI的OIer
展开
-
BZOJ3996: [TJOI2015]线性代数 解题报告
Description给出一个N*N的矩阵B和一个1*N的矩阵C。求出一个1*N的01矩阵A.使得D=(A*B-C)*A^T最大。其中A^T为A的转置。输出D题解可以化简一下公式 (A∗B−C)∗AT=A∗B∗AT−C∗AT=∑ai∗aj∗bi,j−∑ai∗ci(A*B-C)*AT=A*B*AT-C*AT=∑a_i*a_j*b_{i,j}-∑a_i*c_i 所以问题可以化为一些物品,选物品ii需原创 2016-10-10 13:25:51 · 1124 阅读 · 0 评论 -
BZOJ3894: 文理分科
继续填坑..经典最小割对每个点拆三个点a,b,c,分别代表周围是否全文,这个点的文理,周围是否全理 先将所有价值加上 然后每个点的b和周围4个点的a,c有最小割的那个二元关系什么的建边,转一个最小割的模型,价值和-最小割就是最大价值建边那里,和源点S连代表选文,和汇点T连代表选理 于是连边(S,b,选理的花费),(b,T,选文的花费),(S,a,0),(a,T,周围全文的花费),...原创 2018-03-19 21:58:31 · 194 阅读 · 0 评论 -
BZOJ3532: [Sdoi2014]Lis
如果不考虑C值的字典序最小的割的话,可以将先dp出以i结尾的LIS长度f[i],然后每个点拆点流量为Bi,对于j<i,a[j]<a[i],f[j]+1=f[i]j<i,a[j]<a[i],f[j]+1=f[i]j...原创 2018-02-23 22:38:58 · 235 阅读 · 0 评论 -
BZOJ3716: [PA2014]Muzeum
首先把给出的视线范围转成向量,建立以这两个向量为基底的平面直角坐标系,每个点得到新的坐标后取反横坐标,变成每个守卫可以看见横坐标比自己小,纵坐标比自己大的手办这个东西似乎对应一个最小割模型,加上所有手办的价值,源连守卫权为贿赂守卫的花费,守卫连他能看见的手办权为inf,手办连汇权为手办的代价,减去最小割因为图太大了,不能跑最小割 考虑到最小割=最大流,可以模型转化,每个守卫有花费这么多的流量,分配原创 2017-12-15 09:41:11 · 409 阅读 · 0 评论 -
BZOJ1449: [JSOI2009]球队收益
列出一个收益的柿子,拆边跑费用流原创 2017-10-19 16:17:46 · 212 阅读 · 0 评论 -
BZOJ3504: [Cqoi2014]危桥
其实这题….我现在还是不知道为什么这样是对的…只是感觉好像很对的样子…有两个源a1,b1两个汇a1,b2 双源互相独立,每个源有一个汇,问是否能满足a1->a2有c1流量,b1->b2有c2流量 直接跑最大流判解会有a1->b2,b1->a2,所以第一次满流后交换b1,b2,若仍满流则有解(其实这是为什么a……)code:#include<set>#include<map>#include<原创 2017-09-12 22:16:17 · 304 阅读 · 0 评论 -
BZOJ3442: 学习小组
最小费用最大流 源连向每个学生流量为k,费用为-Fi 每个学生连向他能去的学习小组,流量为1,费用为0 每个学习小组的支出费用与参加的人数平方相关,所以拆边连向汇(类似石头剪刀布),拆出n条边代表参加的人数为1~n时增加的支出,因为最小费用,所以总是会先选小的边,比如第i条边,选的时候1~i-1一定已经流满了,那这时i的贡献为 C∗i2−C∗(i−1)2=C∗(2∗i−1)C*i^2-C*(原创 2017-04-27 10:23:11 · 526 阅读 · 0 评论 -
BZOJ4205: 卡牌配对
大胆使用渐进复杂度较高的算法… 最大流 要求至多1个属性互质即至少2个属性不互质 设立三类节点(a,b),(a,c),(b,c)代表这两项不互质,枚举a,b,c不互质的公共质因子,因为200以内质数不多,所以大概也就50*50*3个节点 然后每个节点和这三类节点,相符合的话就连边流量1,X类在左边,Y类在右边 源连X类流量1,Y连汇流量1code:#include<set>#includ原创 2017-04-27 10:11:18 · 452 阅读 · 0 评论 -
BZOJ4663: Hack
最小割 要求0-n-1的每一条路径上有且仅有一条被控制的边 正常情况下跑最小割,每条路上是只会割一条的,但是有些非正常情况 要不你们看这篇?这篇有图… 然后…我不知道为什么要这样建图,是怎么想的(有人会了告诉我一声?)…..但是这样建图是对的..因为它能避免所有非法情况… 只处理起点能到的点,最后答案超过inf即无解(终点在环内)code:#include<set>#include<ma原创 2017-04-27 09:53:27 · 464 阅读 · 0 评论 -
BZOJ2039: [2009国家集训队]employ人员雇佣
经典最小割 先将所有收益E加到答案 源代表不雇佣,汇代表雇佣 每个点向汇连边流量为雇佣价格对于每对关系i,j之间, 如果两个都不雇佣,损失为2e 如果雇佣i不雇佣j,损失为fi(雇佣花费)+2e 如雇佣j不雇佣i,损失为fj+2e 两个都雇佣,损失为fi+fj于是源向i,j连边流量为ei,j i向j,j向i连边,流量为2ecode:#include<set>#include<map原创 2017-04-27 08:50:27 · 453 阅读 · 0 评论 -
BZOJ1927: [Sdoi2010]星际竞速
每个点到达恰好一次,相当于出度入度都为1 最小费用最大流 源连出度,入度连汇,费用0 源向入度点连边,费用为跳过去的花费 出度点向能到达的入度点连边,费用为走航道的花费 流量都为1code:#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cmath>#include<原创 2017-04-27 08:30:30 · 440 阅读 · 0 评论 -
BZOJ1221: [HNOI2001] 软件开发
经典餐巾问题 最小费用最大流 每天拆成两个点代表出入度,左边点出度代表每天用完的毛巾的去向,右边点入度代表每天毛巾的来源, 源向左边每个点连边流量为这一天用掉的毛巾,费用0, 左边的点i可以向右边的i+a+1连边流量inf,费用fA,i+b+1连边流量inf,费用fB,代表这天用完后的毛巾消毒后拿到这一天用, 每天用完的毛巾可以不消毒堆积到下一天,所以左边的点i向i+1连边流量inf,费用原创 2017-04-27 08:23:07 · 426 阅读 · 0 评论 -
BZOJ3144: [Hnoi2013]切糕
这是个最小割的经典模型? 嗯如果不考虑相邻切点那个要求距离D,那么就是在每个纵轴上找一个最小的,如果用最小割,可以源连向每个纵轴最上的点,然后每个纵轴互相独立,向下一层连,容量为点权,最小割即答案 如果考虑相邻切点高度距离差不大于D的限制,每个纵轴上的点就向相邻纵轴高度比它低D的点连容量无限的边,这样可以限制,原因见图,这篇题解写的挺详细的 既然这篇题解写的这么详细我写这个还有什么意义...c原创 2017-01-31 13:25:48 · 502 阅读 · 0 评论 -
BZOJ3171: [Tjoi2013]循环格
易知题目要求最终达到的状态是原图有若干个环,那么所有点的出度和入度都为1,费用流…建图的话,拆点,源向左侧点连容量为1,费用0的边,代表出度,右侧点向汇连容量为1,费用0的边,代表入度,然后每个点的向四个方向的点连容量1,如果不是本来的方向费用1,否则费用0code:#include<set>#include<map>#include<deque>#include<queue>#includ原创 2017-02-11 10:54:49 · 533 阅读 · 0 评论 -
BZOJ3232: 圈地游戏
比较经典的最小割 先二分V/C的最大值,V/C=k−>V−kC≥0V/C=k -> V-kC ≥ 0,将边权×k做一遍最小割,如果减完大于0就可行,因为要保留三位小数,所以可以将点权和边权都×1w后二分整数#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cmath>#incl原创 2016-11-16 07:32:16 · 769 阅读 · 0 评论 -
BZOJ 大视野 1001 狼抓兔子
最小割原创 2015-02-02 14:54:20 · 1224 阅读 · 0 评论 -
分层图
之前有分层图的题没做,比赛遇到挂了,补一补 例:BZOJ1579 分成0~k层,表示用了多少次更新,每条边分一条连向下一层的边权值为code:#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cmath>#include<ctime>#include<bitset>#in原创 2016-10-18 15:06:21 · 1518 阅读 · 0 评论 -
网络流的网络流
做了一段时间的网络流,发现只会刷水,稍难的都不会。。。经典模型: BZOJ1070: 每个人拆成若干个点,每辆车和拆出的第i个点连就代表他是这个人倒数第i辆修的车,对答案贡献i*c BZOJ1532: 二分最大流 BZOJ1565: 最大权闭合子图:即点有依赖关系,对于一条边(u,v)(u,v),选了点uu必须点vv,选择一个点集使权值最大,构图:新增源,向正权点连边容量为点权,新增汇,负权点原创 2016-10-31 17:03:44 · 612 阅读 · 0 评论 -
51nod 1551 集合交易
任意一个全集的子集包含的元素数量>=子集大小,根据霍尔定理,这个其实就是说存在完美匹配先将权值全部取反,问题变成求最大收益考虑最小割源点和集合连边(st,i,收益) 若集合i包含了元素j,连边(i,j,inf) 元素和汇点连边(j,ed,0) 然后给每条边加上一个相对较大的值A首先这个图一定割了n条边 证明: 若这个图边权全1,那么因为存在完美匹配,最小割=最大流=...原创 2018-04-21 07:48:09 · 219 阅读 · 0 评论