专栏文章
题解:CF1427G One Billion Shades of Grey
CF1427G题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mip8pwka
- 此快照首次捕获于
- 2025/12/03 07:59 3 个月前
- 此快照最后确认于
- 2025/12/03 07:59 3 个月前
首先考虑边缘的数值域只有 怎么做。考虑网络流,通过让 与 连通来代表 选 ,与 连通代表 选 。相邻的两个点连一条权值为 的双向边。不考虑边界上已经确定的点,用与 直接连边替代与它们连边。这样就能做到 了。
显然存在一个最优解,你需要填的数就是边缘出现过的数。
断言:对于每一个 ,令 为把边缘点设置成 所求得的答案,则整个问题的答案为 。
(具体不会证明)
有了这个断言,于是就可以枚举扫描线的 的范围(显然有 个)。最开始求一遍网络流是 ,即 。观察到所有点的流量都为 ,并且边变化的条数只有 ,于是考虑退流。
具体地,当需要删掉一条边的时候,假定该边有流量,且设流量方向为 ,则先将全局最大流减去该边流量,则跑一遍以 为源点, 为汇点的最大流,然后再跑一遍以 为源点, 为汇点的最大流。最后再跑一次最大流,把求得的数值加到全局最大流上。一轮增广复杂度为 ,会变化 次,所以时间复杂度仍为 。
卡常方面:
首先把
#define int long long 关了。其次手写队列。
最重要的一点:由于删除边最多只会影响一条到 到 , 到 的流量,而删边与加边会导致的流量变化只有 ,所以可以直接使用 EK,省去 Dinic 的一次 dfs。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...