网络流24题


       二分图匹配,学到了使用反向边是否存在流量来输出路径。
      
       最大权闭合图,将正权点连接s,容量为点权,负权点连接t容量为点权绝对 值,所求得的一个割将图分为两部分,我们发现所有正点权的和减去该简单 割,便是与s相连的闭合图的权,因为最小割所以最大权闭合图(即给定 常数c,求c-a的最大值,等价于求c减去a的最小值)。注意跑完最大流 以后,与s相连的点构成的点集就是最大权闭合图。学会了使用bfs之后 的lv数组来输出路径
      
       最小路径覆盖,用原图建立一个两层的新图,如果原图中存在边i->j我 们建立的新图就有第一层的点i流到第二层的点j,最后建立超级源点流向 所有的第一层图的点,建立超级汇点,由所有第二层的图流入,用n减去所 求的最大流就是最小路径,
       对于路径输出的时候,要先理解为什么得到的答案是最小路径,我们发现每 有一个成功的二分图匹配路径a->b那么说明可以由a走到b,也就是第一层 的a点可以走到第二层的b点,我们把这个映射回原图,就是a到b这样一条边 ,也就是说在原图中可以走这样的一条边,另一方面假设我们一共走了k条边 走完了图,那么此时最少路径就是n-k。与上面的一样我们只要保证k最大就能 得到最少的路径,显然最大的k就是二分图匹配了,如此二分图匹配中我们不妨 设原图的点i映射到二分图的i与n+i,那么如果二分图匹配到了a->b那么说明我们 在原图中走了a->(b-n)这样一条边.


       依旧是是一个最小路径覆盖的问题,我们考虑把球当作点,把盒子当成路径,那么 很明显,连边方式就是i->j当且仅当i<=n且j<=n且i+j=k^2.
但是这样子做我们只能解决这样一个问题:
       给你从1到n的n个球我们可以找到最少的盒子来装球。
       仔细分析发现题目给的问题可以二分处理,我们二分来判断n个盒子能不能装到k个球 就可以了。


       给m组人,每个人要分到不同的桌子上,每个桌子可以一定 量的人,组内的人不能坐在一个桌子上, 网络流问题,s连到 组,流量组内人数,桌子连到t,流量为可以坐下的人数,组与 桌子自由组合, 流量为1。


       让你求一个数列的最长不下降子序列的长度k,然后求这个序列最多可以 分出多少个这样的子序列,再求如果可以多次使用第一个元素和最后一个元素 可以分出多少个这样的子序列,
       我们考虑到每个元素dp的值(dp[i]表示以i结尾的最长不下降子序列的长度),并以 次最为标准,给所有点分ans1层,并给所有第一层的点连s,所有最后一层的点连t, 如果i<j且a[i]<=a[j]我们就连一条边i->j,如此如果每当从s流到t,就是一个字串,考虑到 一个点只能用一次,拆点限流就可以了。


       给你一个试题库,告诉你每个题目的类型(一个题目可能属于多种类型),让你 用这些题为每个类型组一套题(告诉了你每套题包含的题数),每道题只能用一次,
       类型在左,题目在右,s连类型,流量为该套题的题数,类型连题目流量1,题目连 t流量1,如果最大流不够要求的题目数量,说明无法组成套题。


       什么怪东西,明明是深搜题


       给你一个矩阵,每个元素一个权值,相邻的元素不能够同时取走, 问你最多可以取走多少权。 对于格子我们令k=行数加列数,对于所有的k&1==1内部,无边, 对于所有的k&1==0内部,无边。于是取走元素就成了:
       拿走点,使得这些点覆盖所有边,于是剩下的点就是独立的了, 没有边互相连。就是我们要的答案,所以就成了 最小点覆盖二分图

此处不方便证明,详情见: 建图与证明


       给你一个城市数组,这些城市从左往右分别对应从东到西, 要求你从最西边的城市出发,到达最东边的城市,在从最东边的城市出发,到达最西边的城市 除了最西边和最东边的城市以外,其他城市只能经过一次 让你求最多经过多少城市,
       考虑最大流,s连最西边的城市,最东边的的城市连t,容量2,对于他给的边只连从东到西的边, 对于一个城市只经过一次考虑拆点限流即可。