----------网络流----------
IcePrincess_1968
这个作者很懒,什么都没留下…
展开
-
POJ3041: Asteroids 题解
有几个重要的关于图的结论:1. 若图中没有孤立点,最大匹配+最小边覆盖=V(V是顶点个数)2. 最大独立集+最小点覆盖=V3. 二分图中,最大匹配=最小点覆盖这道题可以这样建图:左边是行的点右边是列的点,设第i个行星坐标是(xi,yi),就把左边的xi和右边的yi连一条边这样就要求这个图的最小顶点覆盖(因为最小顶点覆盖保证每条边的两个端点都至少有一个被选中,也就是每个行原创 2017-07-16 14:01:49 · 284 阅读 · 0 评论 -
AOJ2251: Merry Christmas 题解
这道题一看让我想到了JSOI2016 Day2T1 Airport,非常像我们可以左边一列节点和右边一列节点都表示L个任务如果i做完来得及再去做j,就在左边i和右边j之间连一条边假设刚开始要L个圣诞老人这样每选中一条边,就表示有某两个任务可以由一个圣诞老人完成,相当于省了一个圣诞老人所以最后用L-最大匹配就是答案注意下标从0开始,m可能等于0(PS:这道题匹配写dini原创 2017-07-23 17:40:13 · 437 阅读 · 0 评论 -
TopCoder SRM468C: MallSecurity 题解
这道题模型还是挺显然的 这看起来是一个N分图,但当N是偶数的时候,这就是一个二分图,奇数层的在左边,偶数层的在右边,原题就是要求一个二分图的最大独立集,∣最大独立集∣=N−∣最大匹配∣∣最大独立集∣=N−∣最大匹配∣\mid最大独立集\mid=N-\mid最大匹配\mid (我脑残了忘了这个结论还用最小割推了一波:要求最多能选中多少个点,相当于求最少扔掉多少个点,对于每条边,左边的点连向源点,...原创 2018-04-15 22:04:38 · 219 阅读 · 0 评论 -
(权限题)NFLSoj #113: 或负 题解
一眼网络流 考虑超级源点向第i个长者连流量为L[i]的边,每个长者拆成D天,向每一天连N-sum[i][j],sum[i][j]表示他当天必须用来准备批判会的时间 每个长者的每一天专门再拆一个点管理长者的午休,连Hl-Hr-sum1[i][j],sum1[i][j]表示他当天午休时间内必须用来准备批判会的时间 最后对应的点向批判会连边*数组不要开小了!!!#include <...原创 2018-04-16 09:26:45 · 648 阅读 · 0 评论 -
BZOJ1059: 矩阵游戏 题解
我们考虑什么样的棋盘是符合题意的,我们会发现同一行和同一列如果有多个黑格子,那么他们之中最多有一个能成为最后的对角线 进一步发现,我们如果能在棋盘上找到n个黑格子,使得他们的行号,列号两两不同,那么就能拼出对角线,这个条件等价于每个行和列都被一枚棋子匹配了一次 于是想到我们对每个行建一个点,对每一个列建一个点,形成一个二分图,对于在a[i][j]的黑格子,就在行的i和列的j之间连一条边,最后跑...原创 2018-04-11 20:18:38 · 195 阅读 · 0 评论 -
AtCoder Grand Contest 004F: Naromi 题解
Model Transformation如果不考虑到这个模型的转换,这道题可能很难入手:题目要求如果相邻两个的颜色相同,就把它们都换成另一种颜色我们先考虑树的情况,树是一个二分图,所以可以先黑白染色我们考虑这样一个模型: 现在有一些池塘,池塘的连接结构和题中的图是一样的,刚开始有些池塘有水,有些池塘没有水(对应二分图)每次操作可以把一个池塘的水流到相邻的池塘里,要求最后原来有水的...原创 2018-04-23 14:38:09 · 192 阅读 · 0 评论 -
ZOJ2314: Reactor Cooling 题解
无源汇的上下界可行流的模板题 上下界的做法可以参考Algorithm Design一书,里面写的很清楚 我们考虑对每个点i维护一个d[i],表示这个点的surve和demand情况,为正表示demand,为负表示serve 我们考虑一条从x到y,下限为low,上限为high的边 如果我们预先从x到y流low的流量,那么这就变成了一条没有下限,上限为high-low的边,全部转换以后就可以跑...原创 2018-05-01 16:55:25 · 186 阅读 · 0 评论 -
BZOJ2597: 石头剪刀布 题解
非常难的费用流题 我有考虑过反过来想,看最少能扣掉几个环,然后用费用流做,但就是建不出模型 这题的想法实在是太巧妙了 考虑一个三元环如果被破坏,那么一定有一个点出度为2 更一般的,如果最后的图里面一个点的出度为x,那么由他形成的非三元环个数是C2xCx2C_x^2 所以我们考虑一个二分图,左边是所有的点,右边是所有的边 超级汇点向每个点连n-1条边,流量都是1,费用分别是0,1,2…n...原创 2018-04-27 23:53:45 · 309 阅读 · 1 评论 -
BZOJ1143: 祭祀 题解
这是一道结论题 题目抽象一下就是要在一个DAG上求一个最大点集,使得两两不可达 上网搜了一下,这个东西叫做最长反链 根据Dilworth定理,最长反链=最小链覆盖 最小链覆盖可以这样搞:我们先把图的传递闭包求一下,这个可以用floyd,然后建一个二分图,如果a–>b有边,就从左边的a向右边的b连一条边 求一个最大匹配,然后用n减一下就是答案了 可以这样理解:刚开始我有n条链,每条...原创 2018-06-07 22:30:53 · 480 阅读 · 1 评论 -
POJ1637: Sightseeing tour 题解
感觉这个网络流的建图还是很妙的 欧拉回路的判定肯定是所有点的入度=出度 我们考虑刚开始随意给无向边定向,这样算出每个点的入度和出度 我们改变一条有向边的方向,会使某个点度数+2,某个点度数-2,所以点的度数的奇偶性不变 我们考虑这样建图:按照我们刚开始给无向边定的向反向连边,容量为1,对于d>0的点i,从s向i连流量为d/2的边,对于d<0的点i,从i向t连流量为-d/2的边,...原创 2018-07-07 22:35:42 · 218 阅读 · 0 评论 -
UVa1658: Admiral 题解
从起点到终点找两条没有公共端点的路径,使得权值和最小,这是老套路了保证每个点只经过一次,可以拆点然后跑流量为2的费用流#include #include #include #include #include #include #include #include #include #include #include #include #include #incl原创 2017-08-06 14:49:08 · 292 阅读 · 0 评论 -
POJ3422: Kaka's Matrix Travel 题解
这一题乍一看和费用流模型不太一样,因为一个点不论经过多少次,都只加一次权值于是我们可以这样做:首先拆点,将每个格子拆成in和out对于每个格子,向下方和右方(如果存在)连一条流量为INF,费用为0的边,从ou连到in对于每个格子拆成的两个点,从in向out连一条流量为1,费用为-a[i][j]的边,再连一条流量为INF,费用为0的边这样走第一次的时候一定会优先选择费用较小的那条边原创 2017-07-27 13:54:00 · 244 阅读 · 0 评论 -
POJ3068: "Shortest" pair of paths 题解
注意每个点不能重复,所以要拆点然后跑一个流量为2的费用流就可以了#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define x first#define原创 2017-07-26 14:16:52 · 274 阅读 · 0 评论 -
POJ3469: Dual Core CPU 题解
这题很考验对最小割的理解其实题目就是让你合理的安排每个任务是在A做还是在B做这样的模型可以想到最小割我们建一个超级源点s和一个超级源点t设s所属于的集合是S,t所属于的集合是T我们希望构一个图,使得它的最小割就是答案对于所有点,向t连一条流量为ai的边,这样所有被分到S的模块在割的时候都会割到ai的边,而在T的模块则不需要割掉这条边对于所有点,从s向它连一条流量为bi的原创 2017-07-16 14:12:05 · 259 阅读 · 0 评论 -
POJ2195: Going Home 题解
这道题是费用流模板题处理费用流可以用edmonds-karp+spfa算法,这样可以有效的处理负边,但spfa的复杂度不够稳定我们可以导入势的概念从而使用dijkstra+edmonds-karp来解决费用流设顶点i的势为h(i),我们将图中原来的边d(e)变成d'(e)=d(e)+h(u)-h(v),这样改动后的图最终的答案只要减去h(s)-h(t)就是原图的答案所以只要合理的选原创 2017-07-17 21:18:58 · 253 阅读 · 0 评论 -
POJ3686: The Windy's 题解
这是一道不错的网络流思维题对于某一个工厂,设有i个玩具在这里加工且按照1~i的顺序加工,这i个玩具的加工时间为z1,z2...zi则对于这个工厂,加工的总时间为z1+(z1+z2)+(z1+z2+z3)+...+(z1+z2+...+zi)化简一下,就有T=i*z1+(i-1)*z2+(i-2)*z3+...+2*zi-1+zi于是我们得到重要的结论:对于某个玩具,在某工厂的制造流原创 2017-07-20 22:41:39 · 269 阅读 · 0 评论 -
POJ3680: Intervals 题解
非常好的网络流题刚开始想所有的点放在左边,线段放在右边,然后连连边跑个费用流什么的一方面,好像不太好连边,另一方面,即使能连,也会TLE,因为边太多有一种很神奇的方法把这些点依次排开,相邻的点之间连流量无限,费用为0的边,走这条边表示这里没有区间覆盖对于每个区间,从左端点向右端点连流量为1,费用为权值的相反数的边,走这条边表示选中了这个区间要控制一个点不被覆盖超过k次,只要原创 2017-07-21 21:40:41 · 368 阅读 · 0 评论 -
POJ2135: Farm Tour 题解
这题可以十分巧妙的转化一来一回可以转化成寻找两条没用重边的去的路把每条边的流量都设为1,费用是时间然后就可以跑一个最大流量为2的费用流#include #include #include #include #include #include #include #include #include #include #include #include #incl原创 2017-07-18 22:01:59 · 226 阅读 · 0 评论 -
POJ1274: The Perfect Stall 题解
这是一个二分图匹配的模板题直接贴代码吧#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define x first#define y second#def原创 2017-07-23 14:49:05 · 299 阅读 · 0 评论 -
POJ2112: Optimal Milking 题解
首先跑一个floyd得到任意奶牛到任意挤奶器的最短距离刚开始以为求所有奶牛路程和的最小值,于是跑了一个费用流,WA然后发现求的是最远的奶牛的路程的最小值。。。于是可以二分答案啊但是对于网络流题目来说不必二分答案,可以直接枚举答案,对于答案i,将距离正好是i的点对连边,这样可以直接用ans=i-1时候的残余网络再跑最大流,答案直接叠加就行#include #include #原创 2017-07-23 14:56:20 · 288 阅读 · 0 评论 -
UVa10092: The Problem with the Problem Setter 题解
建立超级源点和超级汇点超级源点向每道题目连一条流量为1的边每种题型向超级汇点连一条流量为该题型的题目数的边,表示这种题型最多选这么多题对于每道题的若干类型,在题目和类型之间连一条流量为1的边跑最大流,判断maxflow是否等于sigma(所有题型要求的题数总和)#include #include #include #include #include #include原创 2017-08-02 23:05:00 · 381 阅读 · 0 评论 -
POJ2987: Firing 题解
这道题求一个图的最大权闭合子图在国集队论文里面有这种题目的求法对于图中原有的有向边,连一条流量为INF的边建立源点s,向所有点权为正数的点连一条流量为点权的边建立汇点t,向所有点权为负数的点连一条流量为点权相反数的边然后求这个图的最小割,也就是最大流,就是最大权闭合子图的权值和最后从源点s搜一下,除了s,其他能走到的点就是最大权闭合子图的节点详细论证见《最小割模型在信息原创 2017-07-26 11:54:36 · 285 阅读 · 0 评论 -
BZOJ2521: 最小生成树 题解
首先除了自己其他的边-1相当于给自己+1 一件显然的事情是我们肯定不会给指定边做+1操作 我们考虑什么时候指定边会不在最小生成树中,我们考虑kruskal的过程,是把边从小到大加入树中的,如果加到(a,b)的时候,a,b在并查集中是连通的,那么(a,b)就不会被加入,也就是说,如果存在一条路径,上面的每一条边权值都不大于w(a,b),那么(a,b)就可能会不被加入,所以对于每一条可能的从a到b...原创 2018-07-13 22:34:48 · 241 阅读 · 0 评论