专栏文章
题解:P9104 [PA 2020] Królewski bal
P9104题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @min4rqbv
- 此快照首次捕获于
- 2025/12/01 20:33 3 个月前
- 此快照最后确认于
- 2025/12/01 20:33 3 个月前
很明显这个图是二分图。
有结论:二分图最大匹配数=二分图最小点覆盖=总点数-二分图最大独立集点数。
考虑求出二分图最大独立集。
对于“最大独立集”,我们需要有以下的限制:
我们选择的“黑色点”以及“白色点”不能同时在一行或者一列。
这相当于我们钦定了“每一行”的颜色和“每一列”的颜色,然后只需要考虑交叉部分的颜色。
令 表示第 列有多少个白色节点,令 表示第 行有多少黑色节点,不妨先随便枚举集合 ,如果 表示我们选择了第 列为白色。
然后我们考虑怎么样选择集合 (表示我们选择黑色的行),初始我们全部都选择白色,考虑增量对答案的贡献,这样我们取最大值就是我们想要的“最大独立集”。
现在考虑加入一行 ,考虑第 列的贡献,分类讨论:
- 为白,这一列不在 中;
- 为黑,这一列不在 中;
- 为白,这一列在 中;
- 为黑,这一列在 中。
仅有 类点和 类点会对答案造成贡献, 类点有 的贡献, 类点有 的贡献。
设 表示第 行在 中有多少白色格子, 表示第 行在 中有多少黑色格子,那么有 ,贡献和为 。
所以 的具体取值并不会影响最终的答案,我们记 ,那么对于固定的 的答案就是,,定义 为 从大到小排序后的数组。
可以定义函数 。我们仅需要快速求出 以及维护单点修改就行,询问实际上就是 。
快速求出 可以扫描线。维护一个线段树支持区间翻转,区间求 或者 的个数的线段树就行。
维护这个函数,也需要考虑线段树,维护区间修改,全局查最大值。
可以分别考虑 的变化,由于 仅能 ,可以考虑 的贡献区间。
对于一个 来讲,其实能够贡献的 在 中。当 变化的时候,在对应区间 即可。
对于一个 来讲,其实 相当于改变了这个数在原数组中对应的位置,可以维护每一个值 在线段树上对应的区间 。当 加 时, 会向左移,令 为原来的 ,可以让 加一, 加一。那么 向右移的情况是一样的。
时间复杂度 。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...