loj#P3633. 「2021 集训队互测」Alice、Bob 与 DFS

「2021 集训队互测」Alice、Bob 与 DFS

题目描述

Alice 和 Bob 又打算玩游戏了。

有一个点数为 nn 的有向无环图(点从 11 开始编号),每个点要么是黑点,要么是白点。图中可能有重边,每个点的出边是有序的。

有一段 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 启动了 kk 个这样的程序,并给所有程序分别输入了一个点的编号作为 rr(不同程序输入的 rr 可能不同)。现在,这些程序都在读取 rr 之后,调用 dfs(r) 之前暂停。

然后游戏开始。由 Alice 先手,双方轮流进行以下操作:

  • 选择一个尚未结束执行的程序,将其从暂停中恢复。继续执行该程序,直到它再次暂停或结束。在这个过程中,该程序每次读取 gg,当前玩家都可以选择读取结果是 true 还是 false

每个程序都会在有限次暂停后结束,最终所有程序均会结束执行。如果轮到一名玩家操作时所有程序均已结束执行,该玩家输掉游戏,另一名玩家获胜。

双方都会采取最优策略。谁能获胜?

输入格式

第一行,一个正整数 nn,表示图的点数。

第二行,nn 个整数 c1,c2,,cnc_1,c_2,\dots,c_n,表示每个点的颜色。cu=0c_u=0 表示 uu 是黑点,cu=1c_u=1 表示 uu 是白点。

接下来 nn 行描述图中的边,其中第 ii 行有一个非负整数 mim_imim_i 个正整数 ei,1,ei,2,,ei,mie_{i,1},e_{i,2},\dots,e_{i,m_i},分别表示 ii 的出边数量和各出边的终点。为了方便,保证对于所有 1in1\le i\le n1jmi1\le j\le m_i,有 ei,j>ie_{i,j} \gt i;即 1,2,,n1,2,\dots,n 是该图的一个拓扑序。

接下来一行,一个正整数 kk,表示程序数量。

最后一行,kk 个正整数 r1,r2,,rkr_1,r_2,\dots,r_k,分别表示游戏开始前各程序的输入。

输出格式

一行,一个字符串,表示获胜者。如果 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

数据范围与提示

对于所有数据:

  • 1n2×1051\le n \le 2\times 10^5
  • ci{0,1}c_i\in \{0,1\}(对于所有 1in1\le i\le n
  • 0mi4×1050\le m_i\le 4\times 10^5(对于所有 1in1\le i\le n
  • i=1nmi4×105\sum_{i=1}^n m_i \le 4\times 10^5
  • i<ei,jni \lt e_{i,j} \le n(对于所有 1in1\le i\le n1jmi1\le j \le m_i
  • 1k2×1051\le k \le 2\times 10^5
  • 1rin1\le r_i\le n(对于所有 1ik1\le i\le k
子任务 分值 特殊限制
11 55 ci=0c_i=0(对于所有 1in1\le i \le n
22 1515 k=1k=1r1=1r_1=1
33 1515 n10n\le 10i=1nmi10\sum_{i=1}^n m_i \le 10k10k\le 10
44 2020 ci=1c_i=1(对于所有 1in1\le i \le n);对于每个点 uu,只有至多一条边的终点为 uu;对于所有 1ik1\le i \le k,图中不存在终点为 rir_i 的边
55 2020 ci=1c_i=1(对于所有 1in1\le i \le n
66 2525 没有额外的约束条件