#ZJOI2020D. 染色游戏

染色游戏

题目描述

Alice 和 Bob 在玩一个染色游戏。游戏在一张 NN 个点 M(N1MN)M(N − 1 \le M \le N) 条边的连通图上进行,Bob 想要围住 Alice,而 Alice 想要逃出 Bob 的包围。

游戏开始时,Alice 将 11 号点涂成了黑色表示占领了 11 号点,Bob 将点集 SS 中的所有点涂成了白色表示占领了这 S|S| 个点,保证 11 不在 SS 中。接下来两个人轮流进行操作,由 Alice 先手,每轮中轮到的玩家可以从一个被自己占领的点出发(对于 Alice 为黑色点对于 Bob 为白色点),选择一个相邻且未被染色的点,占领该点并染上自己的颜色。如果不存在可以染色的点,那么这位玩家必须跳过这个回合。当所有点都被染完色时,游戏结束。

Alice 和 Bob 约定了一个图中的非空点集 TT,如果游戏结束时 TT 中的点全都涂成白色,则代表 Bob 成功围住了Alice,Bob 获胜。反之一定存在一个 TT 中的点被涂成黑色,那么 Alice 获胜。注意这里的 TT 可能会包含 SS 中的点和 11 号点。

Alice 和 Bob 都会使用最优策略。Bob 注意到,在有些局面下,Alice 优势很大,如果能让 Alice 主动跳过 Alice 的一些行动回合来获得一个更加公平的局面,这个游戏会更有可玩性。Bob 想知道,如果 Alice 跳过前 kk 个回合之后自己能够获胜,那么这个 kk 的最小值是多少。

Alice 只会跳过 Alice 的前 kk 个回合,并且在剩下的回合中采用最优策略,即你可以理解为 Bob 在 Alice 的第一回合行动之前额外行动了 kk 个回合。注意如果 Bob 在 Alice 跳过的一个回合中没有合法行动,那么 Bob 仍需按照规则跳过自己的回合。如果在原图上就是 Bob 获胜那么输出 00。如果 k=1000000k = 1000000 时 Bob 也不能取胜,则输出 10000001000000

由于这个图可能很大,我们用如下的方式生成。

  • 首先生成一个含有标号为 11nn 一共 nn 个点的空图。
  • 接下来加入 mm 条链,第 ii 条链记作 (ui,vi,li)(u_i, v_i, l_i),其中 1ui,vin1 \le u_i, v_i \le nuiviu_i \neq v_i
    • 首先我们加入 lil_i 个点,记作 x1i,x2i,,xliix_1^i, x_2^i, \dots, x_{l_i}^i
    • 然后在之 $(u_i, x_1^i), (x_1^i, x_2^i), (x_2^i, x_3^i), \dots, (x_{l_i - 1}^i, x_{l_i}^i), (x_{l_i}^i, v_i)$ 间连上无向边。
    • 在这次操作之后,本轮中新加入的 lil_i 个点不会再与其他的点之间连边,即不同的链中的 x1ixliix_1^i \dots x_{l_i}^i 均为互不相同的点。特别地,如果 l=0l = 0,那么就不添加新点,直接在 (ui,vi)(u_i, v_i) 之间连上无向边。

保证 SS 集合以及 TT 集合的点均为一开始生成的 nn 个点之一。

输入格式

第一行输入一个整数 CC,表示数据组数。

对于每组数据:

  • 第一行输入四个整数 $n, m, |S|, |T|(1 \le |S| \le n − 1, 1 \le |T| \le n, n − 1 \le m \le n)$。
  • 接下来 mm 行每行输入 33 个非负整数 $u_i, v_i, l_i(1 \le u_i, v_i \le n, 0 \le l_i \le 10^6)$,表示题面中的第 ii 条链。
  • 接下来一行输入 S|S| 个数 s1sSs_1\dots s_{|S|} 表示 SS 集合中的所有元素(2sin2 \le s_i \le n 且不重复)。
  • 接下来一行输入 T|T| 个数 t1tTt_1\dots t_{|T|} 表示 TT 集合中的所有元素(1tin1 \le t_i \le n 且不重复)。

即每组数据按照如下格式输入:

$$\begin{aligned}&n\ m\ |S|\ |T|\\&u_1\ v_1\ l_1\\&u_2\ v_2\ l_2\\&\cdots \\&u_m\ v_m\ l_m\\&s_1\ s_2 \cdots s_{|S|}\\&t_1\ t_2 \cdots t_{|T|}\\\end{aligned} $$

保证 uiviu_i \neq v_i(即没有自环),保证没有相同的 (ui,vi)(u_i, v_i) 对(即没有重边),保证给出的图是 一个连通图。

输出格式

输出 CC 行,对于每组测试数据,输出为了让 Bob 取胜 Alice 至少要跳过的回合数 kk。如果在原图上就是 Bob 获胜那么输出 00。如果 k=1000000k = 1000000 时 Bob 也不能取胜,则输出 10000001000000

5
6 5 2 2
1 2 0
2 3 0
2 4 0
3 5 0
4 6 0
5 6
3 4
6 5 2 2
1 2 1
2 3 0
2 4 0
3 5 0
4 6 0
5 6
3 4
5 4 2 2
1 2 1
1 3 1
2 4 0
3 5 0
4 5
2 3
8 8 1 2
1 2 2
2 3 1
3 4 0
4 5 0
5 6 0
6 7 0
7 2 1
5 8 0
8
3 7
8 8 1 2
1 2 3
2 3 0
3 4 0
4 5 0
5 6 0
6 7 0
7 2 0
5 8 0
8
3 7
1
0
0
0
1

样例 2

见附加文件中 game2.ingame2.out

数据范围与提示

测试点 nn mm 其他约定
11 =n1=n-1 图为一条链
22
33 12\le 12 =n1=n-1nn li=0l_i=0
44
55
66
77 =5=5 =n=n
88 =6=6
99 =8=8
1010 图为一个环
1111 环上一定存在至少两个白色点即 S\vert S\vert 中的点
1212 环上一定存在至少一个白色点即 S\vert S\vert 中的点
1313 环上一定存在至少一个 T\vert T\vert 中的点
1414
1515 =n1=n-1nn T=1\vert T\vert=1
1616 S=1\vert S\vert=1
1717
1818
1919
2020

对于 100%100\% 的数据,m=nm = nn1n − 13n5003 \le n \le 500C=10000C = 100000li1060 \le l_i \le 10^61Sn1,1Tn1 \le |S| \le n − 1, 1 \le |T| \le n 且保证图中不存在点数(只计算前 nn 个点的数量)大于 100100 的环,每个测试点中最多只有 1010 组数据满足 n>50n > 50,最多只有 10001000 组数据满足 n>20n > 20