CF 1253 题解

CF 1253 题解

A Single Push

考虑令 di=biai, 那么合法当且仅当 d 在一个前缀和一个后缀都是 0, 其余地方值一致并且非负.

B Silly Mistake

注意到能作一次划分的时候立即划分一定更优, 因为这样就不会因为潜在的一天两次进入办公室而得不到答案.

贪心的模拟即可.

C Sweets Eating

首先把 a 降序排列, 用手去玩前几个值, 注意找递推关系: (令 k=2)

f1=a1f2=a2+a1f3=a3+a2+2a1f4=a4+a3+2a2+2a1f5=a5+a4+2a3+2a2+3a1

观察得 fi=sumi+fik, 递推即可.

D Harmonious Graph

考虑一个边 lr, 那么意味着 lr 这个区间都联通. 维护这样的连通性只需要并查集, 顺便用并查集跳过已经合并的位置, 那么暴力做就是对的.

需要添加的边就是目前的连通块数减掉最终连通块数, 证明考虑每一条边合并两个连通块.

E Antenna Coverage

注意到 n 比较小, 那么考虑一个 O(nm) 的 dp, 设 fi 表示用第 i 格之前的信标去覆盖前 i 个位置的最小代价, 枚举覆盖第 i 格所用的信标 j, 计算刚好覆盖 i 时该信标所覆盖的左端点 l, 然后转移 ficst+minlj<ifj, 后半部分在单调栈上二分即可.

问题是最后面的信标可能在右侧覆盖范围超出了 m, 但是注意到它一定不会超过 2m, 那么计算到 2m 即可.

F Cheap Robot

这道题是很牛的. 首先考虑求出来每个点离它最近的充电站的距离 disi, 以及该充电站编号 neari. 暴力做直接炸了, 但是考虑多源 dij 就可以了.

考虑列列式子, 对于一条边 uv:w, 设经过 i 时电量为 ci, 答案为 x, 由于任意充电桩到达它都需要 disi 代价, 而它到达任意充电桩都需要 disi 代价, 因此有:

disicixdisi

我们不妨认为机器人从 u 走到了 v, 那么:

disucuxdisudisvcuwxdisv

那么不难发现:

xdisvcuwdisuw

移项, 得:

xdisu+disv+w

我们现在有答案的一个下界, 考虑现在有路径 P:uv, 而现在令答案是 max(u,v):wP(disu+disv+w), 是否存在合法路径呢? 存在的, 设路径表示为 p1p2p3pk1pk, 那么我有足够的电量从 p1 走到 nearp2, 再从 nearp2 走到 nearp3, 以此类推即可.

因此把每条边重新赋边权, 然后建立最小生成树, 倍增求链上最大值即可.

posted @   snowycat1234  阅读(25)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示