专栏文章

题解:CF1427G One Billion Shades of Grey

CF1427G题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mip8pwka
此快照首次捕获于
2025/12/03 07:59
3 个月前
此快照最后确认于
2025/12/03 07:59
3 个月前
查看原文
首先考虑边缘的数值域只有 22 怎么做。考虑网络流,通过让 iiSS 连通来代表 ii11,与 TT 连通代表 ii22。相邻的两个点连一条权值为 11 的双向边。不考虑边界上已经确定的点,用与 S/TS/T 直接连边替代与它们连边。这样就能做到 O(n2)O(n^2) 了。
显然存在一个最优解,你需要填的数就是边缘出现过的数。
断言:对于每一个 vv,令 f(v)f(v) 为把边缘点设置成 aiva_i \ge v 所求得的答案,则整个问题的答案为 vf(v)\sum_v f(v)
(具体不会证明)
有了这个断言,于是就可以枚举扫描线的 vv 的范围(显然有 nn 个)。最开始求一遍网络流是 O((n2)1.5)O((n^2)^{1.5}),即 O(n3)O(n^3)。观察到所有点的流量都为 11,并且边变化的条数只有 O(1)O(1),于是考虑退流。
具体地,当需要删掉一条边的时候,假定该边有流量,且设流量方向为 (u,v)(u,v),则先将全局最大流减去该边流量,则跑一遍以 uu 为源点,SS 为汇点的最大流,然后再跑一遍以 TT 为源点,vv 为汇点的最大流。最后再跑一次最大流,把求得的数值加到全局最大流上。一轮增广复杂度为 O(n2)O(n^2),会变化 nn 次,所以时间复杂度仍为 O(n3)O(n^3)
卡常方面:
首先把 #define int long long 关了。
其次手写队列。
最重要的一点:由于删除边最多只会影响一条到 11uuvvnn 的流量,而删边与加边会导致的流量变化只有 11,所以可以直接使用 EK,省去 Dinic 的一次 dfs。

评论

0 条评论,欢迎与作者交流。

正在加载评论...