#abc289e. [abc289_e]Swap Places

[abc289_e]Swap Places

问题描述

有一个简单无向图,有 NN 个顶点,顶点从 11NN 编号,有 MM 条边,边从 11MM 编号。第 ii 条边连接了顶点 uiu_i 和顶点 viv_i
每个顶点都被涂成红色或蓝色。顶点 ii 的颜色用 CiC_i 表示;如果 CiC_i00,则顶点 ii 被涂成红色,如果 CiC_i11,则顶点 ii 被涂成蓝色。

现在,高桥站在顶点 11,青木站在顶点 NN
他们可以重复以下移动零次或多次:

  • 他们同时移动到当前顶点相邻的顶点。
    这里,高桥和青木移动到的顶点的颜色必须不同。

通过重复上述移动,高桥和青木能否同时站在顶点 NN 和顶点 11 上?
如果可能,找出所需的最小移动次数。如果不可能,输出 -1

输入开头给定了 TT。解决这个问题需要对 TT 个测试用例分别进行求解。

约束条件

  • 1T10001 \leq T \leq 1000
  • 2N20002 \leq N \leq 2000
  • 1Mmin(N(N1)2,2000)1 \leq M \leq \min(\frac{N(N-1)}{2}, 2000)
  • Ci{0,1}C_i \in \lbrace 0, 1 \rbrace
  • 1ui,viN1 \leq u_i, v_i \leq N
  • 输入中给出的图是简单图。
  • 所有输入值都是整数。
  • 所有测试用例中 NN 的总和不超过 20002000
  • 所有测试用例中 MM 的总和不超过 20002000

输入

输入以以下格式从标准输入给出,其中 texttesti\\text{test}_i 表示第 ii 个测试用例:

TT texttest1\\text{test}_1 texttest2\\text{test}_2 vdots\\vdots texttestT\\text{test}_T

每个测试用例以以下格式给出:

NN MM C1C_1 C2C_2 \dots CNC_N u1u_1 v1v_1 u2u_2 v2v_2 \vdots uMu_M vMv_M

输出

输出共 TT 行。第 ii 行应该包含第 ii 个测试用例的答案。
对于每个测试用例,如果可能,输出高桥和青木同时到达顶点 NN 和顶点 11 所需的最小移动次数;如果不可能,输出 -1

示例输入 1

3
4 4
0 1 0 1
1 2
2 3
1 3
2 4
3 3
0 1 0
1 2
2 3
1 3
6 6
0 0 1 1 0 1
1 2
2 6
3 6
4 6
4 5
2 4

示例输出 1

3
-1
3

对于第一个测试用例,高桥和青木可以通过以下 33 步达到目标,这是最少的步数:

  • 高桥移动到顶点 33,青木移动到顶点 22
  • 高桥移动到顶点 22,青木移动到顶点 33
  • 高桥移动到顶点 44,青木移动到顶点 11

注意,在第一步中,高桥和青木都不能移动到顶点 22(因为高桥和青木移动到的顶点的颜色必须不同)。

对于第二个测试用例,无论他们如何移动,都无法达到目标。