[转http://www.cppblog.com/abilitytao/archive/2009/09/02/95147.html  ->  http://yejingx.ycool.com/post.2801156.html:http://hi.baidu.com/cjhh314/blog/item/ded8d31f15d7510c304e1591.html] 二分图最小覆盖的Konig定理及其证明 一.定义 二分图: 顶点可以分类两个集合X和Y,所有的边关联在两个顶点中,恰好一个属于集合X,…
Dilworth定理,将最长反链转化为最小链覆盖.//貌似还能把最长上升子序列转化为不上升子序列的个数? floyd传递闭包,将可以重叠的最小链覆盖转化成不可重叠的最小路径覆盖.(引用:这样其实就是相当于将原图改造了一下,只要 x 能到达 y ,就直接连一条边 (x, y),这样就可以“绕过”原图的一些被其他路径占用的点,直接构造新路径了.) 建立二分图,跑匈牙利.(见白书P357) #include<cstdio> #include<cstring> using namespac…
题意:图没什么用  给出一个地图 地图上有 点 一次可以覆盖2个连续 的点( 左右 或者 上下表示连续)问最少几条边可以使得每个点都被覆盖 最小路径覆盖       最小路径覆盖=|G|-最大匹配数                   证明:https://blog.csdn.net/qq_34564984/article/details/52778763 证明总的来说就是尽可能多得连边 边越多 可以打包一起处理得点就越多(这里题中打包指连续得两个点只需要一条线段就能覆盖) 拆点思想   :匈牙…
欢迎参加——BestCoder周年纪念赛(高质量题目+多重奖励) Air Raid Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 3841    Accepted Submission(s): 2536 Problem Description Consider a town where all the streets are one-w…
题目链接 这个……学了一条定理 最小路径覆盖=原图总点数-对应二分图最大匹配数 这个对应二分图……是什么呢? 就是这样 这是原图 这是拆点之后对应的二分图. 然后咱们的目标就是从这张图上跑出个最大流来,然后用原图的总点数减去就是答案. 至于记录路径……我发现有一个规律是可以在Dinic跑DFS的时候记. 别的我不知道了.因为我只会Dinic. 代码如下. #include<cstdio> #include<cstring> #include<cctype> #inclu…
Consider a town where all the streets are one-way and each street leads from one intersection to another. It is also known that starting from an intersection and walking through town's streets you can never reach the same intersection i.e. the town's…
(附一道例题) Time Limit: 1000 ms   Memory Limit: 128 MB Description 最小点覆盖是指在二分图中,用最小的点集覆盖所有的边.当然,一个二分图的最小点覆盖可能有很多种. 现在给定一个二分图,请你把图中的点分成三个集合: 如果在任何一种最小点覆盖中都不包含这个点,则认为该点属于N集合. 如果在任何一种最小点覆盖中都包含这个点,则认为该点属于A集合. 如果一个点既不属于N集合,又不属于A集合,则认为该点属于E集合. Input 第一行包含三个整数n…
Konig定理 由匈牙利数学家柯尼希(D.Konig)于1913年首先陈述的定理. 定理的内容:在0-1矩阵中,1的最大独立集合最小覆盖包含的元素个数相同,等价地,二分图中的最大匹配数等于这个图中的最小点覆盖数. 证明: 对于上面的二分图,它的最大匹配(不唯一)已经用红线标出来了, 然后我们对于右边或左边(这里按右边为例)没有匹配的点,我们从它出发走交替路(这里有介绍),会经过若干节点 将所有从右边没有匹配的点开始的交替路上的所有的点标注起来(如下图标蓝的点) 可以证明左边所有被标注的点都是被匹…
题意 给出一个R*C大小的网格,网格上面放了一些目标.可以在网格外发射子弹,子弹会沿着垂直或者水平方向飞行,并且打掉飞行路径上的所有目标.你的任务是计算最少需要多少子弹,各从哪些位置发射,才能把所有目标全部打掉. 分析 啊!原来这个模型叫 最小覆盖模型啊!难道不是最小割直接做嘛?? 二分图最小覆盖:既选择尽量少的点,使得每条边至少有一个端点被选中.可以证明,最小覆盖数等于最大匹配数. 本题的建模方法: 将每一行看作一个X结点,每一列看作一个Y结点,每个目标对应一条边.这样,子弹打掉左右的目标意味…
来源 最小点集覆盖==最大匹配. 首先,最小点集覆盖一定>=最大匹配,因为假设最大匹配为n,那么我们就得到了n条互不相邻的边,光覆盖这些边就要用到n个点. 现在我们来思考为什么最小点击覆盖一定<=最大匹配. 任何一种n个点的最小点集覆盖,一定可以转化成一个n的最大匹配.因为最小点集覆盖中的每个点都能找到至少一条只有一个端点在点集中的边. 如果找不到则说明该点所有的边的另外一个端点都被覆盖,所以该点则没必要被覆盖,和它在最小点集覆盖中相矛盾. 多个覆盖点都只能选则同一个点组成匹配的情况是不会出现…