最近一直很忙,为了节省时间,从今以后的题解会 一个专题 写一篇。

刷了一些题后,有了以下总结:

模型要点:

1.构造流量平衡,在满足流量平衡的情况下,找到要让什么最大。

2.一般用于判断性问题,即所有从源点流出的边满流(或者所有流入汇点的边满流)的时候可行.所以往往和二分答案结合起来使用。

3.如果答案假设为i+1的时候的图仅仅比假设答案为i的时候的图多了一些点或者边,那么可以在假设答案为i的图 跑过最大流后,加上相应的点和边,继续跑最大流.这样顺序枚举答案,避免了每次重新做最大流和重新构图,许多时候效率比二分答案高。

相关题目:

1.飞行员配对方案 (网络流24题):

题解:

二分图匹配的模型.

2.最小路径覆盖(网络流24题):

题解:

由于是DAG,可以发现选取路径数等于顶点数减去选取的边数。每个点只能在一条路径上,因此除了起点和终点,每个点的入度出度都为1. 因此转化为二分图,把每个点i拆成2个点<si,ti>(分别表示点i的入度和出度),对于每条边<i,j>,连边<ti,sj>(让i出度和j入度+1). 然后连<S,ti> <si,T>,每个点的入度出度都只能用一次,那不就是二分图匹配的模型了? 如果要输出方案,找到所有si没有匹配的点(即没有入度)当做起点,沿着匹配边dfs寻找就可以了.

3.魔术球(网络流24题):

题目大意:有n根柱子,在这n根柱子中依次放入编号为1,2,3,……的球,每次只能在某根柱子的最上面放球,在同一根柱子中,任何2个相邻球的编号之和为完全平方数。求在n根柱子上最多能放多少个球。

题解:

注意题目中是依次放,所以编号小的只能放在编号大的下面。所以对于球i,找到所有满足(i+j)是完全平方数且j>i的球j,连一条边<i,j>. 然后二分答案,做最小路径覆盖与n比较。 这样做的前提是按编号从小到大放球,可见题中"依次"的重要性。

4.最长递增子序列(网络流24题)

题目描述:

给定正整数序列x1, x2, ..., xn。
(1)计算其最长递增(非降,允许有相等元素)子序列的长度s。
(2)计算从给定的序列中最多可取出多少个长度为s的递增子序列。
(3)如果允许在取出的序列中多次使用x1和xn,则从给定序列中最多可取出多少个长度为s的递增子序列。

题解:

这题当时没想出来,构图挺巧妙的.

第一问:dp就不多说了,F[i]表示以i结尾的LIS。

第二问:利用第一问dp的数组。 对于任意i<j,只有当 A[i]<A[j] 且 F[i]+1==F[j]的时候才连边<i,j>。由于每个点只能用一次,所以拆成两个点,增加点流量限制为1.

第三问:只要去掉第二问中 点1和点N的流量限制就可以了。

5.星际转移问题(网络流24题)

题目大意:

有N个人在地球(源点S),要用公交飞船送到(汇点T),然后告诉你每个飞船的周期和路线,求最少要多少天完成目标。

题解:

这题让我第一次接触了分层图的思想。如果不拆点,那么没法表示边,因为根据周期边是会"跑"的。根据lrj《训练指南》上的做法,假设答案是k天,那么把一个点拆成k+1个点,即表示第i天这个点的状态。 那么就可能根据公交飞船的周期和路线来连边.比如有一个飞船,第3天在i点,第4天在j点,那么连边<i3,j4>.做最大流判断是否能达成目标就可以了。 至于k,二分或者枚举都可以,但是枚举应该会快一些。

6.Ombrophobic Bovines(poj 2391)

题目大意:

有一些牛分别在一些点上,然后有一些边,表示相邻的点之间相互到达的时间,求最短的时间使得所有的点上都有牛。

题解:

首先做一次floyd,把原始边转化为最短路边,记为dist[i][j]。其次可以转化为判定性问题,二分或者枚举最短的时间ans.判断ans是否可行, 只要拆点i为<si,ti>,

然后对于所有dist[i][j]<=ans的边<i,j>  加边  <ti,sj> , 对于本来就有牛的点,加边<S,si> , 然后每个点加边<ti,T> <si,ti> 做最大流看与汇点连接的弧是否都满流。

ps:如果用枚举,不是每次+1,而是事先把dist排序,然后依次枚举。实践证明,枚举比二分稍微快了点。

7.Sightseeing tour(poj 1637)

题目大意:

混合图判断是否存在欧拉回路。

题解:

存在欧拉回路的充要条件是每个点的入度和出度相等。那么对于无向边,先随便给它定个方向,然后统计每个点的入度出度。记点i的入度出度分别为为xi,yi。

由于每个点的xi+yi是固定的(不随无向边的方向改变而改变,如果是奇数必定无解),因此对于yi>xi的点,必须把和它相连的且起点定为它的无向边反向(yi-xi)/2个才能使入度出度相等(当然也可以把终点定为它的无向边反向,只要最终结果是这样即可)。同理对于xi>yi的点,必须把和它相连的且终点定为它的无向边反向(yi-xi)/2个才能使入度出度相等。 那么就可以构造网络G,对于yi>xi的点,连边<S,i,(yi-xi)/2> 对于xi>yi的点,连边<i,T,(xi-yi)/2>,对于每一条人为定向为<i,j>的无向边,连边<i,j,1>,跑最大流判断是否满流即可。

8.PIGS(poj 1149)

题目大意:

有一些猪圈,然后依次来了一些顾客,分别会打开一些猪圈并买走一些猪(有买的上限),对于每个顾客,他来买的时候 被打开的猪圈里的猪可以跑到其他被打开的猪圈里,他买完了就不行了。问最多能卖多少头猪。

题解:

如果一个顾客光顾的猪圈集合为{x,P},那么x的下一个顾客就可以买到{x,P}里的猪。 因此先预处理出每个猪圈会被那些顾客打开(按顺序),以顾客为节点,对于猪圈x的第一个顾客x1,连边<S,x1,pig[x]> ,pig[x]为一开始猪的数量。对于其他顾客,连边<xi,xi+1,inf> 然后每个顾客连边到汇点,容量为买的上限。跑最大流就是答案。

9.The Maximum Number of Strong Kings(poj 2699)

题目大意:

n个人两两之间打比赛(竞赛图),赢的人加一分,一个人是Strong King当且仅当他的得分最高或者他打败了所有比他分数高的人。给出每个人的得分,求最多能有多少个Strong Kings.

题解:
网络上很多人都说假设答案是ans,那么一定存在某个方案,使得得分最高的ans个人是Strong Kings,但是大多都是含糊的说概率比较大什么的,我只在一篇博文里看到了证明 http://blog.csdn.net/sdj222555/article/details/7797257 ,但是感觉也不大严谨 ,  一定是我太弱了。

最保险的做法还是二进制枚举 Strong Kings 。

然后是构图,构造二分图,一边表示比赛,一边是选手。对于不是Strong Kings的选手i,j之间的比赛 k, 连边<S,k,1><k,i,1><k,j,1>,如果选手i是Strong Kings,看他的对手得分j是不是比他大,如果比他大,那就不连<k,j>.  然后每个选手连边到汇点,容量为其得分。 跑最大流 看是否满流。

最大流 总结&&做题记录的更多相关文章

  1. FJOI2017前做题记录

    FJOI2017前做题记录 2017-04-15 [ZJOI2017] 树状数组 问题转化后,变成区间随机将一个数异或一,询问两个位置的值相等的概率.(注意特判询问有一个区间的左端点为1的情况,因为题 ...

  2. UOJ 做题记录

    UOJ 做题记录 其实我这么弱> >根本不会做题呢> > #21. [UR #1]缩进优化 其实想想还是一道非常丝播的题目呢> > 直接对于每个缩进长度统计一遍就好 ...

  3. project euler做题记录

    ProjectEuler_做题记录 简单记录一下. problem 441 The inverse summation of coprime couples 神仙题.考虑答案为: \[\begin{a ...

  4. Sam做题记录

    Sam做题记录 Hihocoder 后缀自动机二·重复旋律5 求一个串中本质不同的子串数 显然,答案是 \(\sum len[i]-len[fa[i]]\) Hihocoder 后缀自动机三·重复旋律 ...

  5. 退役IV次后做题记录

    退役IV次后做题记录 我啥都不会了.... AGC023 D 如果所有的楼房都在\(S\)同一边可以直接得出答案. 否则考虑最左最右两边的票数,如果左边>=右边,那么最右边会投给左边,因为就算车 ...

  6. 退役III次后做题记录(扯淡)

    退役III次后做题记录(扯淡) CF607E Cross Sum 计算几何屎题 直接二分一下,算出每条线的位置然后算 注意相对位置这个不能先搞出坐标,直接算角度就行了,不然会卡精度/px flag:计 ...

  7. 退役II次后做题记录

    退役II次后做题记录 感觉没啥好更的,咕. atcoder1219 历史研究 回滚莫队. [六省联考2017]组合数问题 我是傻逼 按照组合意义等价于\(nk\)个物品,选的物品\(\mod k\) ...

  8. BJOI做题记录

    BJOI做题记录 终于想起还要做一下历年省选题了2333 然而咕了的还是比做了的多2333 LOJ #2178. 「BJOI2017」机动训练 咕了. LOJ #2179. 「BJOI2017」树的难 ...

  9. [日记&做题记录]-Noip2016提高组复赛 倒数十天

    写这篇博客的时候有点激动 为了让自己不颓 还是写写日记 存存模板 Nov.8 2016 今天早上买了两个蛋挞 吃了一个 然后就做数论(前天晚上还是想放弃数论 但是昨天被数论虐了 woc noip模拟赛 ...

随机推荐

  1. Java中内存中的Heap、Stack与程序运行的关系

    堆和栈的内存管理 栈的内存管理是顺序分配的,而且定长,不存在内存回收问题:而堆 则是随机分配内存,不定长度,存在内存分配和回收的问题:堆内存和栈内存的区别可以用如下的比喻来看出:使用堆内存就象是自己动 ...

  2. html5,新增的元素,fieldset legend

    <form action="">    <fieldset>        <legend>用户注册</legend>       ...

  3. [ruby]Windows Ruby安装步骤

    Windows Ruby 安装步骤 准备工作: 1.http://rubyinstaller.org/downloads/ 下载选择Ruby 1.9.3 2.http://rubyinstaller. ...

  4. IE8 下 select option 内容过长 , 展开时信息显示不全解决办法

    IE8 下 select option 内容过长 , 展开时信息显示不全 , 简单折衷的方式就是给 option 加上 title 属性 , 但是又不想一个个的修改,怎么办呢,代码如下 : //sel ...

  5. Java堆栈的应用1----------堆栈的自定义实现以及括号匹配算法的Java实现

    接下篇:http://www.cnblogs.com/fuck1/p/5995857.html 堆栈的应用1:括号匹配算法 括号匹配问题 假设算术表达式中包含圆括号,方括号,和花括号三种类型.使用栈数 ...

  6. 完整成功配置wamp server小记

    首先安装最新版本的wamp server,这是必须的! 配置默认”www目录”的路径(可选):下面以改为D:\site为例.打开wamp\scripts\config.inc.php第47行,$www ...

  7. POJ 2876 Cantoring Along

    Description The Cantor set was discovered by Georg Cantor. It is one of the simpler fractals. It is ...

  8. LA 5135 井下矿工

    题目链接:http://vjudge.net/contest/141787#problem/B 白书P318 题目大意:有N个矿井 ,由一些隧道连接起来,现在要修建尽量少的安全通道,使得无论哪里发生事 ...

  9. fidder 使用教程

    fidder 使用教程 1. Fiddler 是什么? Fiddler是用C#编写的一个免费的HTTP/HTTPS网络调试器.英语中Fiddler是小提琴的意思,Fiddler Web Debugge ...

  10. python importlib

    api 文档 importlib.import_module(name, package=None) Import a module. The name argument specifies what ...