/* 二分答案,判mid是否合法 如何判断:如果是在直线上,那么遍历匹配即可 现在在环上,即既可以向前匹配也可以向后匹配,那么将环拆开,扩展成三倍 显然a和b的匹配边是不可能交叉的,因为交叉必定没有不交叉优 hall定理:二分图两个点集A,B,连续一段A的点对应连续一段B的点的 充要条件是 这些点对的匹配边之间不交叉 重要推论:二部图G中的两部分顶点组成的集合分别为X,Y, 若|X|=|Y|, 且G中有一组无公共端点的边,一端恰好组成X中的点,一端恰好组成Y中的点,则称二部图G中存在完美匹配 有…
目录 题目链接 题解 代码 题目链接 bzoj3693: 圆桌会议 题解 对与每个人构建二分,问题化为时候有一个匹配取了所有的人 Hall定理--对于任意的二分图G,G的两个部分为X={x1,x2,-,xn}和Y={y1,y2,-,ym}, 存在一个匹配M使得|M|=|X|的充要条件为对于X的任意一个子集A,与A相邻的点集记为T(A),一定有|T(A)|≥|A| 拆环为链 对于任意的区间[L,R],长度R-L+1,将所有区间[L,R]内的组插入操作求和为sum,如果sum > R - L + 1…
[CF981F]Round Marriage(二分答案,二分图匹配,Hall定理) 题面 CF 洛谷 题解 很明显需要二分. 二分之后考虑如果判定是否存在完备匹配,考虑\(Hall\)定理. 那么如果不合法,假设我们存在一个极小的集合满足连到右侧的点数小于集合大小.因为是极小的,所以删去一个点之后就可以匹配,那么意为着某个点连出去的点和其他所有点有交,既然有交,那么一定这一段区间都可以加入进来形成一个不合法的集合.所以我们可以把存在一个点集不合法变成存在一段连续区间不合法. 假设每个点连向另外一…
传送门 题意: 给出一个长度为\(L\)的环,标号从\(0\)到\(L-1\). 之后给出\(n\)个新郎,\(n\)个新娘离起点的距离. 现在新郎.新娘要一一配对,但显然每一对新人的产生都会走一定的距离\(d_i\),求所有\(d_i\)中最大值最小是多少. 思路: 显然最后的答案具有单调性,故可以二分答案之后来判定. 二分最大时间\(x\),那么只添加距离不超过\(x\)的边,做个最大匹配即可. 但因为\(n\)达到\(2e5\),显然匈牙利算法不可行. 考虑\(hall\)定理:若一个二分…
对于一个二分的答案 假设存在一个点集使得不满足Hall定理 题中给定的信息说明 左边每个点对应的右边点是一个区间 如果当前点集对应的右边区间是若干个不相交的区间组成的话说明我们还可以找到一个更小的点集使得其也不满足Hall定理 假设我们当前找到了一个极小的不满足Hall定理的点集 其对应的右边区间如上所证一定是一段连续的区间 如果这个极小的点集不是一段连续的区间的话 我们可以加入一些点 使得左边的点集变成连续的一段区间而右边对应的点集不变 得证:在题中,如果有一个点集不满足Hall定理 则必定存…
充分性证明就先咕了,因为楼主太弱了,有一部分没看懂 霍尔定理内容 二分图G中的两部分顶点组成的集合分别为X, Y(假设有\(\lvert X \rvert \leq \lvert Y \rvert\)).G中有一组无公共点的边,一端恰好为组成X的点(也就是存在完美匹配)的充分必要条件是:X中的任意k个点至少与Y中的k个点相邻,即对于X中的一个点集W ,令N(W)为W的所有邻居, 霍尔定理即对于任意W,\(\lvert W\rvert \leq \lvert N(W)\rvert\) 证明 1.必…
题意: 给定一个H行W列的矩阵,在矩阵的格点上放带权值的卡片(一个点上能放多张). 现在从每行每列各拿走一张卡片(没有可以不拿),求可以拿到的最大权值. 卡片数N<=1e5,H,W<=1e5 思路: 显然可以构造成一个最大费用流模型:每张卡片到它对应的行列各有一条费用0,容量1的边:源点到每张卡片有一条费用为卡片权值,容量1的边:每个行列到汇点有一条费用0,容量1的边.但是边数有5e5,应该会超时吧? 观察这个图发现除去源点和汇点是一张二分图,想到是否可以利用二分图的性质简化问题. 手动模拟一…
正题 题目链接:https://atcoder.jp/contests/arc106/tasks/arc106_e 题目大意 \(n\)个员工,第\(i\)个在\([1,A_i]\)工作,\([A_i+1,2\times A_{i}]\)休息,\([2\times A_i+1,3\times A_i]\)工作...以此类推. 然后每天可以为一个在工作的人发一枚奖牌,至少多少天才能让每个人都有\(k\)块奖牌. \(1\leq n\leq 18,1\leq k,A_i\leq 10^5\) 解题思…
题面传送门 首先 \(b_i\) 的顺序肯定不会影响匹配,故我们可以直接将 \(b\) 数组从小到大排个序. 我们考虑分析一下什么样的长度为 \(m\) 的数组 \(a_1,a_2,\dots,a_m\) 能和 \(b\) 数组形成匹配.考虑对于 \(i,j\in [1,m]\),若 \(a_i+b_j\geq h\),就在 \(i,j\) 之间连边,那么形成的图必然是一张二分图,我们只需检验这张二分图是否存在完美匹配即可. 这时候就要用到一个叫做 Hall 定理的科技了.Hall 定理说的是这…
\(Description\) 给定一个\(n\)个点的二分图,每条边有边权.求一个边权最小的边集,使得删除该边集后不存在完备匹配. \(n\leq20\). \(Solution\) 设点集为\(S\),与\(S\)中的点相邻的点的并集为\(N(S)\). 由Hall定理,若存在点集\(S\)满足\(|S|>|N(S)|\),则该图不存在完备匹配. 因为\(n\)很小,直接枚举所有子集\(S\)并贪心删相邻点即可. 另外topcoder跑得快,直接写\(2^n\times n^2\)就好了..…