loj#P3633. 「2021 集训队互测」Alice、Bob 与 DFS
「2021 集训队互测」Alice、Bob 与 DFS
题目描述
Alice 和 Bob 又打算玩游戏了。
有一个点数为 的有向无环图(点从 开始编号),每个点要么是黑点,要么是白点。图中可能有重边,每个点的出边是有序的。
有一段 DFS 程序,其伪代码如下:
定义过程 dfs(u):
if u 是白点
按顺序遍历 u 的所有出边 (u,v)
读取一个布尔值 g
if g
dfs(v)
else
按顺序遍历 u 的所有出边 (u,v)
dfs(v)
读取一个整数 r
dfs(r)
这段程序还有一个特殊性质:程序会在每次 dfs
过程调用开始前自动暂停。
Alice 和 Bob 启动了 个这样的程序,并给所有程序分别输入了一个点的编号作为 (不同程序输入的 可能不同)。现在,这些程序都在读取 之后,调用 dfs(r)
之前暂停。
然后游戏开始。由 Alice 先手,双方轮流进行以下操作:
- 选择一个尚未结束执行的程序,将其从暂停中恢复。继续执行该程序,直到它再次暂停或结束。在这个过程中,该程序每次读取 ,当前玩家都可以选择读取结果是
true
还是false
。
每个程序都会在有限次暂停后结束,最终所有程序均会结束执行。如果轮到一名玩家操作时所有程序均已结束执行,该玩家输掉游戏,另一名玩家获胜。
双方都会采取最优策略。谁能获胜?
输入格式
第一行,一个正整数 ,表示图的点数。
第二行, 个整数 ,表示每个点的颜色。 表示 是黑点, 表示 是白点。
接下来 行描述图中的边,其中第 行有一个非负整数 和 个正整数 ,分别表示 的出边数量和各出边的终点。为了方便,保证对于所有 ,,有 ;即 是该图的一个拓扑序。
接下来一行,一个正整数 ,表示程序数量。
最后一行, 个正整数 ,分别表示游戏开始前各程序的输入。
输出格式
一行,一个字符串,表示获胜者。如果 Alice 获胜,输出 Alice
;如果 Bob 获胜,输出 Bob
。
4
1 0 1 0
1 2
2 4 3
1 4
0
1
2
Alice
5
1 1 0 0 1
2 3 5
2 3 5
2 5 4
0
0
2
1 2
Bob
10
0 0 0 0 1 1 1 1 0 1
1 2
2 3 4
0
3 5 8 10
1 6
1 7
0
1 9
0
0
1
1
Bob
数据范围与提示
对于所有数据:
- (对于所有 )
- (对于所有 )
- (对于所有 ,)
- (对于所有 )
子任务 | 分值 | 特殊限制 |
---|---|---|
(对于所有 ) | ||
, | ||
,, | ||
(对于所有 );对于每个点 ,只有至多一条边的终点为 ;对于所有 ,图中不存在终点为 的边 | ||
(对于所有 ) | ||
没有额外的约束条件 |