网络流题目总结

来源:互联网 发布:猫为什么喜欢薄荷 知乎 编辑:程序博客网 时间:2024/05/16 02:06

这次再收flag就真的退役了……
每天的任务是一场CF/TC的Div1.
再刷几道BZOJ题目。
同时会刷一道网络流题目。


总体思路:
1.二分答案+check[scoi奇怪的游戏]
2.拆点表示自身的限制[scoi蜥蜴]
3.最小代价/最大收益转化成最小割[tjoi线性代数]
4.分层建点[hnoi切糕]
5.通过变量间的增量减少边/点的数量[hnoi切糕,tjoi线性代数]
6.转化成二分图模型[tjoi循环格]
7.黑白染色[圈地计划]
8.通过增强数据范围让人觉得它不是个网络流
9.最大权闭合图(分类讨论)
10.通过前驱/后继的特殊性建图(通常变成二分图)
11.分阶段性建图[建比较暴力的图]
12.对行进行建点,对列进行建点,行对列的贡献只有1.<在网格图极其好用。>


一些规定
三元组在网络流中出现时,(a,b,c)定义为weight[a>b]:=c
在费用流中出现时,weight[a>b]:=ccost[a>b]=0;
四元组在费用流出现时:weight[a>b]:=ccost[a>b]=d;


通常在最小割中,我们会将黑色白色分别划到S和T集合中,或者将选或不选划到S和T集合中。
考虑选或不选时的建图:
1.A和B**存在至少一个**在T时,产生d的代价(意味着A在T或者B在T的时候,C一定在T):(S,C,d),(C,A,inf),(C,B,inf)
2.A和B全在T时,产生d的代价:


1.[SCOI2009]蜥蜴
建图思路:
明显对于自己本身的限制,那么对于每个对自身的限制拆点
(i,i,h[i])。这样可以很好地表示最大流。
2.[TJOI2015]线性代数
建图思路:
首先想到最小割,把有收益有代价的图转化成只有代价的图。
然后想到,如果表示val[i][j][a[i] and a[j]],即:某些东西必须同时选时才能产生这个代价。
3.[CQOI2009]dance跳舞
建图思路:
会发现对于自身有k的限制,那么一定是拆点
然后很自然的想到答案可以二分,这样随便check下就行了。
4.[Tjoi2013]循环格
建图思路:
不算很明显的二分图(其实很明显吧233)
注意到入度等于出度等于1,那么实际本题是求一个可修改的匹配。
跑费用流就行了。
5.[noi2006]最大获利
建图思路:
听说是个最大权闭合图的模板题。
但是我是分类讨论做的。
选A会产生a的代价(A,T,a)
对于一个点对(A,B,c);
考虑到如果A不选那么就会产生c的代价,那么变成:(S,A,c).
考虑到在点对中,如果B不选那么就会失去c的代价,那么变成:(A,B,c).
按照最大权闭合图的做法:
A或者B不选都会产生c的代价,那么(S,C,c),(C,A,inf),(C,B,inf)
6.[SDOI2010]星际竞速
转化成阶段来想。
我们相当于有n个白点,经过一些方法[直接染黑/通过某个黑点并经过这条边]把它染黑,且只染黑一次。
怎么做呢?
费用流。
我们有n个白点:(S,i,1)
直接变成n个黑点:(S,i+n,1,a[i]),(i+n,T,1)
间接通过黑点去染黑:(j+n,i,w[j>i])
实际上这个题就可以认为是一个拆点。
是不是很好玩呢。
7.[ZJOI2011]营救皮卡丘
又是把白点全都弄成黑点。
(在[1,n])免费提供n个白点(S,i,1)
n个黑点的答案(i+n,T,1)
在0处免费提供K个白点(S,0,K)
在流后,每个白点都能被变成黑点,那么白点的贡献是它之后的黑点。
(i,j+n,1,w[i>j])(j>i)
8.未知出处
n支队伍,要互相进行一些场次的比赛,一共还有m场没有比。给出每个队目前的总分以及m场谁要和谁比。问是否有方案安排这m场比赛的结果(你可以决定这m场谁赢),使得第n支队伍最后的总分大于其他任一支队伍的总分。一场比赛赢了得两分,输了0分,平了1分。(1<=n<=100,1<=m<=1000)
首先运用贪心,把第n个队伍的都弄赢。
注意到一个问题:每次比赛实际上是分配了两分。
那么就成SB题了。
注意观察一些流量平衡的细节非常重要。

0 0
原创粉丝点击