#CF2137G. Cry Me a River
Cry Me a River
题目描述
存在一个包含 个节点和 条边的有向无环图。所有节点初始时均为蓝色。
定义“趣味图游戏”(fun graph game)规则如下:
- 初始时,将一枚令牌放置在节点 上。
- Cry 和 River 轮流将令牌移动到一个满足“存在从当前节点指向该节点的有向边”的节点上,其中 Cry 先手。
- 若令牌在任一玩家的回合后到达一个无出边的节点,则 Cry 获胜。
- 若令牌在任一玩家的回合后到达一个红色节点,则 River 获胜。
- 特殊规则:若玩家到达一个“既为红色又无出边”的节点,则 River 获胜。
由于该图是有向无环图,可证明游戏一定会在有限回合内结束。
需注意:若起始节点 无出边,则 Cry 可立即获胜;若起始节点 为红色,则 River 可立即获胜。
你需要处理 个如下类型的查询:
- 1 u:将节点 的颜色更新为红色。保证执行此更新前,节点 为蓝色。
- 2 u:若令牌初始放置在节点 上进行“趣味图游戏”,且两名玩家均采用最优策略,Cry 会获胜吗?
输入格式
每组测试包含多组测试用例。第一行输入测试用例的数量 (),随后依次描述每组测试用例。
每组测试用例的输入格式如下:
- 第一行:三个整数 、、(,)。
- 接下来 行:每行包含两个整数 和 (),表示存在一条从 指向 的有向边。
- 接下来 行:每行包含两个整数 和 (,),分别表示查询类型和查询所针对的节点。
保证给定的图是有向无环图,且不会重复给出同一条边。同时保证所有测试用例的 之和、 之和、 之和均不超过 。
输出格式
对于每个类型 2 的查询,若 Cry 获胜则输出 "YES",否则输出 "NO"。字母不区分大小写,例如 "Yes" 、 "no" 均视为有效输出。
样例
1
7 8 10
1 2
1 3
1 4
2 5
3 6
5 7
2 3
3 4
2 1
1 3
1 4
2 1
2 2
2 3
2 4
2 5
2 6
2 7
YES
NO
YES
NO
NO
YES
YES
YES
样例说明
下方为样例中的图:

- 初始时所有节点均为蓝色。因此 Cry 不会失败,最终令牌一定会被移至一个无出边的节点。
- 将节点 3 和 4 涂为红色后,在采用最优策略的情况下:从节点 1、3、4 开始游戏时,River 会获胜。若游戏从节点 1 开始,一种可能的进程如下:
- Cry 将令牌移至节点 2。
- River 将令牌移至节点 3(该节点为红色),因此 River 获胜。
可以证明,对于其他所有节点,采用最优策略时 Cry 仍会获胜。
来源
Codeforces 2137G,英文题名 Cry Me a River。