这里的证明都是大概只有我能看懂的不严密证明…
建新图。
对于边 <u,v> ,若是匹配边,则v向u连边;若是非匹配边,则u向v连边。
源汇点同理:若 <s,u> 是匹配边,则u向s连边,否则s向u连边。若 <u,e> 是匹配边,则e向u连边,否则u向e连边。
然后求scc,若边 <u,v> 是匹配边且在同一个scc中,则是可行边;若是匹配边但不在同一个scc中则是必须边。
概念:二分图中选最少得点,使其覆盖所有的边。
可以贪心地去选点,使点出现在最大匹配上。
概念:二分图中选最少的边,使其覆盖所有点。
首先可以贪心地选最大匹配上的边,因为这样可以一条边覆盖两个点。剩下的点只能由其他边一条边覆盖一个点了。
设最大匹配数为m,选的其他边的数量是a,满足2m+a=n,答案是m+a=n-m,即最小边覆盖=顶点数-最小点覆盖。
概念:二分图中找一个最大点集,使得两点之间没有边。
去掉最少的点,剩下最多的点,使它们互相没有边。去掉的是点覆盖。
概念:有向无环图中选出不相交路径覆盖所有点,求不相交路径最小值。
拆点:把每个点拆成入点和出点,然后对于边 <u,v> ,加边 <u,v′> 。
可以发现有向无环图中的一条边对应二分图中一条匹配边。
有向无环图中的每条边的出点(from)对应于二分图的对应边匹配边左部点。
每条路径最后一个点没有对应。
所以最小路径覆盖=路径最后一个点最最少=最少未匹配点=原图顶点数-拆点后最大匹配
首先不管是可行边还是必须边都要是满流边,因为最小割。
必须边:容量增大后最小割值增大。
必须边求法:跑完最小割后在残量网络上从源点dfs,汇点反向dfs,枚举起点被源点搜到、终点被汇点搜到的满流边就是答案。
另一种求法是tarjan。鏼大爷Orz。
可行边好像只能tarjan?
tarjan求可行边、必须边(前提条件是满流):
必须边:要求 sccnum[u]==sccnum[s] && sccnum[v]==sccnum[e] 。tarjan缩点后,若满足这个条件,那么扩大 <u,v> 的流量必能使最大流增大,所以是必须边。
可行边:要求 sccnum[u]!=sccnum[v] ,因为缩点后剩下的边只有满流边,任一割都满足这个条件,而这些边有可能会出现某一个最小割中,所以是可行边。
以S-T流表示方案,根据题意把方案列上,要能在图中找到所有题目要求信息的体现。
codevs1907方格取数3:二分图最大点权独立集=总边权-最小割。
相邻两格连INF边:防割。每次割的边表示不选,还可以保证冲突的点只选一个,保证是独立集。相当于去掉了最小点权覆盖集。
【bzoj1565】[NOI2009]植物大战僵尸:最大权闭合图=总正点权-最小割
源点向所有正点权为x的点建流量为x的边,负点权x的点向汇点建流量为-x的边,原图边容量INF。
证明略,详见胡伯涛论文。其中最大权闭合图在S集。
【poj2125】Destroying The Graph:二分图最小点权覆盖集=最小割
S连左部,容量为点权。右部连T,容量为点权。原边为INF。然后最小割。
最大点权独立集模型:对于一条边,要么只选u,要么只选v,要么都不选。
最小点权覆盖集模型:对于一条边,要么只选u,要么只选v,要么都选。
若有类似【最少的代价把集合分成两份】,可以考虑最小割。
在最大流表示所有方案的基础上,费用流是从所有方案中择优选取。
bzoj1834网络扩容:
题目要求最少扩建费用。在残量网络上建边,只要原图存在的边(不管现在流量是不是0)都建流量为INF,费用为 wi 的边,表示对这个边的扩建程度。还需要增加一个源点限制流量。
【COGS743】最长k可重区间集问题:最大权不相交路径
主要是怎么建…