- byron10000's blog
Clipboard
- 2024-8-1 17:10:01 @
ABC261Ex Game on Graph
给定一张带权有向图, 两个人玩游戏: 有一棋子, 初始在给定点上, A先手, 轮流一沿当前点的出边将棋子移至另一点, 无法移动则游戏结束. A 想让经过边的边权最小, B 想让其最大. 双方以最优策略游玩, 要求出最终得分, 或者报告游戏不会结束.
记 为当前 A/B 要操作, 棋子在点 的得分. 若 无出边, 则 . 否则:
$$F(0,u)=\min_{u\stackrel{w}{\rarr} v} F(1,v)+w\\ F(1,u)=\max_{u\stackrel{w}{\rarr} v} F(0,v)+w\\ $$考虑在反图上应用 dijkstra 算法: , 对于 , 正常转移; 对于 , 每次转移到其的时候, 只更新 , 不加入队列, 仅当其的所有出边处理完了才加入优先队列 (注意到若 , 必然有 , 故 dijkstra 的 转移后要更大的限制可以满足).
时间复杂度
CF568C New Language
使用前 种字母, 每种字母有一个类型 (总共 种类型, 要求构造一个长为 的字符串 , 其字典序必大于等于另一给定字符串 , 且满足若干条限制: : 若 有类型 , 则 要有类型 .
对于限制, 考虑使用 2-SAT: 个变量 , 为了方便, 记 表示 有类型 , 对于 , 连边 (同时有 ).
考虑从小到大枚举每一位: 枚举填什么字母 (相同类型的字母只用考虑满足字典序要求时最小的, 除了下文所说的特殊情况), 判断是否产生矛盾 (若为类型 , 那么 ), 暴力判断即可.
注意特殊情况: 可能前面填了之后后面不存在让字典序不大于 的填法, 考虑回退, 设前面 位 , 考虑让 增大, 那么后面就不用再受字典序要更大的限制. 注意到每个 最多回退一次, 故最多回退 次.
时间复杂度