CF132E Bits of merry old England

传送门

构图好题。郑哥的题解

每一个输出的位置看作先分配变量(赋值或者用前面的),再输出。

给每个位置拆三个点 vi,1/2/3vi,1 的流入表示这个位置的 "空变量" 数量(包括有值但是我们选择让它不重复使用的变量);vi,2 有流入表示分配好了这个输出位置的变量;vi,3 有流入表示输出好了。

(这里拆三个点而不是两个的原因:我们需要 vi,2vi,3 的边有下界来保证一定有输出)

然后跑上下界,可以得到最小代价。

怎么求方案?(这才是难点吧)

用一个 set 维护当前的空变量。同时给每个输出位置记录一个 prti 表示这个位置输出的变量名字是什么。

循环 i1n,如果 vi,1vi,2 有流量,说明在这个位置是重新赋值的,从 set 里面取一个变量用即可。

然后看 vi,3vnxt[i],2,如果有流量说明这次的变量保留到了 nxt[i] 使用。令 prtnxt[i]prti;如果没流量,其实就等同于 prtii 这个位置就寿终正寝了,把它放进 set 里面作为空变量。

我们这么做的依据:如果在位置 i 使用了一个变量并保留到 j 使用,则 i<k<j 的位置 k 如果和 i 输出相同,也一定使用了 prti

另外这也是因为上下界网络流的结果删除 ts 的边就是解。

posted @   FLY_lai  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示