、

P3838 [IOI 2017] Toy Train

题意

给定一个有向图,玩家 A,B 分别控制一些点。有一些点是特殊点。对于每一个点作为开始位置,A,B 一开始选择将每一个自己的点只保留一条出边,保证形成一条环。A 先手,求是否使得包含一个特殊点。

\(n\le 5000 , m\le 20000\)

思路

首先我们发现,对于一开始作为开始位置可以等价于转化成每次走到一个点选择一条边去走,因为最优情况下这不会改变什么。之后发现,环的长度最大就是 \(n\),所以等价于我们只需要去找是否能够经过特殊点无数次。
对于只有一个特殊点的情况,我们考虑有向图博弈求出其他的点先手能否到达这个特殊点的状态 \(s\)。那么对于这个特殊点的归属,如果属于先手控制那么只需要满足存在相邻位置先手能到即可无数次,因为这样就可以形成一个环,即为状态 \(s\)。那么对于后手控制的情况,只要不存在有相邻位置先手到不了,那么就是前面的 \(s\),否则全 \(0\)。

现在思考扩展到多个点。我们发现因为要经过无数个特殊点,那么需要保证一个特殊点每次都可以到达另一个(可以为自己)的特殊点,只要这样就可以走无数次了。所以我们迭代 \(n\) 次每次删去不能动的特殊点即可。那么 \(s\) 就是最终答案。

时间复杂度 \(O(nm)\)。

posted @ 2026-09-24 14:42  tanghg  阅读(4)  评论(0)    收藏  举报