题意 N个人抢M个椅子,M个椅子排成一排 ,第i个人只能坐[1,Li]∪[Ri,M],问最多能坐多少人 $i$人连边向可以坐的椅子构成二分图,题意即是求二分图最大完美匹配,由霍尔定理,答案为$max(|X|-\omega(X))$,$X$为人的集合,$\omega(X)$可以表示为$[1,l] \cup[r,M]$,所以可以枚举$\omega(X)$也就是$(l,r)$,求出最大的$|X|$,也就是满足$L_i\le l \land r \le R_i$的$i$的数量,也就是平面上以$(l,r)…
---题面--- 题目大意: 有n个人,m个座位,每个人可以匹配的座位是[1, li] || [ri, m],可能有人不需要匹配座位(默认满足),问最少有多少人不能被满足. 题解: 首先可以看出这是一个二分图匹配,根据hall定理,我们只需要求出max(人的子集大小 -  被选出的人可以选的座位集合大小). 但是枚举人的复杂度太高,所以考虑枚举座位集合,因为每个人的可选区间都是一段前缀or后缀,因此要表达一个合法的座位集合,我们只需要所有人中最右边的li和最左边的ri即可. 如图所示: 因此这个…
题目链接 Problem Statement There are M chairs arranged in a line. The coordinate of the i-th chair ($$$1≤i≤M$$$) is $$$i$$$.N people of the Takahashi clan played too much games, and they are all suffering from backaches. They need to sit in chairs and re…
题意 地上 \(1\) 到 \(m\) 个位置摆上椅子,有 \(n\) 个人要就座,每个人都有座位癖好:选择 \(\le L\) 或者 \(\ge R\) 的位置.问至少需要在两边添加多少个椅子能让所有人坐满. \(m\le n\le 2\times 10^5\) 分析 因为最后的形式一定是左边和右边连续的一段+一些新加入的椅子.只需要求出所有人构成的子集 \(|x|-|\digamma (x)|\) 的最大值,不需要知道具体哪些椅子参与了完美匹配. 注意到区域的并除了全集以外仍然可以用 \([…
霍尔定理 + 线段树? 咱学学霍尔定理... 霍尔定理和二分图完美匹配有关,具体而言,就是定义了二分图存在完美匹配的充要条件: 不妨设当前二分图左端集合为 X ,右端集合为 Y ,X 与 Y 之间的边集为 E 令 \(\omega(x)\) 表示在 Y 中能通过 E 与 x 中元素相连的元素数量,那么 $\forall x\in X, |x| \le |\omega(x)| $ 为 X 与 Y 存在完美匹配的充要条件... 然后咱发现,多加上 t 个人的话,也就是必然会让 \(|\omega(x…
题面 题目大意: 给你\(m\)张椅子,排成一行,告诉你\(n\)个人,每个人可以坐的座位为\([1,l]\bigcup[r,m]\),为了让所有人坐下,问至少还要加多少张椅子. Solution: 为什么加椅子?我们可以在最左边或最右边一直加直到人人都有座位. 首先这道题目抽象成二分图很简单,然后我们可以只要求解出人与座位的最大匹配是多少,总人数减去即可,但跑二分图最大匹配显然会超时,我们就可以往霍尔定理方面想. 然后你还需要知道一个霍尔定理推论:假设某个人的集合为\(X\),这个集合所对应的…
题意 题目链接 分析 又是一个二分图匹配的问题,考虑霍尔定理. 根据套路我们知道只需要检查 "区间的并是一段连续的区间" 这些子集. 首先将环倍长.考虑枚举答案的区间并的右端点 \(r\),显然 \(r\) 应该在某个区间的右端点上.我们想要判断是否存在一个 \(l\) 使得 \(r-l+1\le m\) 且 \(\sum\limits_{l\le L_i,R_i\le r}a_i>r-l+1\) ,扫描线+线段树 即可. 有一类特殊情况:区间的并是整个环,这时它在序列上的表示长…
题意 一共有 \(n\) 堆石子,每堆石子有一个数量 \(a\) ,你要进行 \(m\) 次操作,每次操作你可以在满足前 \(i-1\) 次操作的回答的基础上选择在 \([L_i,R_i]\) 区间中拿走至多 \(b\) 颗石子,保证区间不存在包含关系,求每次你最多拿走多少颗石子. \(n\le 4\times 10^4\) 分析 二分图匹配复杂度太高,考虑霍尔定理. 假设某次操作时我们已经知道了每次操作取走多少颗石子,我们选择判断的操作集合一定是按 \(L\) 排序之后连续的(因为能够选择的区…
题意 题目链接 分析 这个二分图匹配模型直接建图的复杂度太高,考虑霍尔定理. 对于某些人组成的区间,我们只需要考虑他们的并是一段连续的区间的集合.更进一步地,我们考虑的人一定是连续的. 假设我们考虑的区间的总人数为 \(x\) ,区间长度为 \(len\), 那么 \(x-(len+d)*k>0\) 于是 \(x-k*len>dk\) ,维护连续最大和即可. 总时间复杂度为 \(O(nlogn)\). 代码 #include<bits/stdc++.h> using namespa…
题目链接 先考虑链.题目相当于求是否存在完备匹配.那么由Hall定理,对于任意一个区间[L,R],都要满足[li,ri]完全在[L,R]中的ai之和sum小于等于总位置数,即R-L+1.(其实用不到Hall定理,显然) 为什么不是子集呢,因为区间并和子集等价,所有区间并都是要验证的. 而且可以发现,只有当R为某个r[i],L为某个l[j]时,[L,R]才有必要验证. 所以我们将区间按r[]排序,枚举每个r[i]作为R.限制条件为\(sum<=R-L+1\)即\(sum+L-1<=R\),对于前…