前置知识:霍尔定理(Hall’s Theorem) #
也叫霍尔结婚定理 (Hall’s marriage theorem)。在二分图中,令两部分点集分别为X,Y, 则存在X−完美匹配(X中的点集全部被匹配)的充分必要条件是:对于X的任意子集W,∣W∣≤∣Γ(W)∣,其中Γ(W)为与W直接相连的点的集合。
题解 #
本题是让我们求最大匹配数,但直接跑匹配算法肯定不合适,此时我们考虑霍尔定理:假设所有人的集合为X,我们至少还需要maxW⊆X∣W∣−∣Γ(W)∣。但是X的子集的个数是指数级的所以不能直接考虑子集。
但是我们发现Γ(X)总是所有椅子的一个前缀加一个后缀,也就是{i∣i≤l∨i≥r,l<r}。于是我们可以考虑枚举l,r,那么椅子的集合所对应的人的集合W为{i∣li≤l∧ri≥r},此时∣W∣−∣Γ(W)∣=∣W∣−(l+m−r+1)。但很显然(l,r)的个数是O(N2)的,还是太慢,不过这已经是一个很大的进步了。
我们再想进一步优化,从小到大枚举l,通过某些数据结构直接求得所有r中的最大值:我们可以用线段树维护对于每一个r,∣W∣−(m−r+1)的最大值。对于每一个人的限制条件Li,Ri,当我们枚举到l≥Li时,如果选择的r≤Ri的话,那么对应的人的集合就会包含i,反映到维护的值上去的话就是把区间[l+1,Ri]里的值 +1。然后用[l+1,m+1]中的最大值减当前的l来更新答案。
注意几点:
- 按 l 从小到大的顺序可以保证前面的Li都是符合条件的,只要考虑r的取值即可。
- 维护的值是把l除去的,因为我们只考虑 r的取值。
- 每个位置的m−r+1都是固定的,所以建树的时候就可以加进去。
- 特殊情况当Γ(X)为整个椅子的集合时,∣X∣−Γ(X)=n−m
代码 #