1 条题解
-
0
题意回顾
- 有向图, 个点,每个点至少一条出边
- 初始只有 点为黑色,其余白色
- 游戏过程:
- Alice 选一个编号 的黑点
- Bob 从 的出边中选一个点染黑
- 定义 是好的:如果从 开始,Alice 能强制让 被染黑(无论 Bob 怎么选)
- 对每个 ,求好的 对数量()
数据范围:,。
关键结论
是好的当且仅当在只保留编号 的点的子图 中:
- 存在 到 的路径
- 所在的强连通分量(SCC)是 的一个汇点(即在 的 SCC 分解中,该 SCC 没有出边指向其他 SCC)
算法框架
1. 增量处理
从 到 依次处理,每次加入点 及其相关边。
2. 维护 SCC
使用并查集(DSU)维护当前 的强连通分量。
3. 动态维护汇点 SCC
对每个 SCC 维护:
- 大小
- 出边集合(指向其他 SCC)
- 标记是否为汇点
4. 统计答案
对每个汇点 SCC,设能到达它的点数为 ,则它贡献 个好对。
算法步骤
初始化
- DSU 初始化,每个点单独成 SCC
- 每个 SCC 的 (出边到其他 SCC 的数量)
- 该 SCC 的大小
处理 到
- 加入点
- 对 的每条出边 :
- 如果 ,在 DAG 中添加边
- 如果 ,则增加 的出度
- 检查并合并形成环的 SCC
- 更新汇点 SCC 集合
- 对每个汇点 SCC 计算 = 能到达它的点数
- $ans[k] = \sum_{S \in \text{sinks}} (R_S - 1) \times size_S$
复杂度分析
- 使用路径压缩 + 按秩合并的 DSU:
- 动态维护 SCC 出度和可达性:
- 总复杂度:,可过
总结
本题的核心在于将博弈条件转化为图论中的汇点 SCC 可达性问题,通过增量加点和动态维护 SCC 来高效求解所有 的答案。
- 1
信息
- ID
- 4468
- 时间
- 5000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 6
- 已通过
- 1
- 上传者