luogu#P11102. [ROI 2022 Day 2] 搬货

[ROI 2022 Day 2] 搬货

题目背景

翻译自 ROI 2022 D2T3

仓库操作员需要使用特殊叉车移动重箱。可以将仓库简化为 nn 个房间,通过 mm 条走廊连接。可以通过走廊从任意一个房间到达任意其他房间。房间编号从 11nn。走廊 ii 直接连接房间 uiu_iviv_i,可以双向移动。

叉车可以升降货物,如果不携带货物,可以在空房间和走廊之间移动。最初,叉车位于房间 11,并携带着升起的货物。叉车可以执行以下操作:

  1. 如果叉车位于房间 aa 并且携带升起的货物,则可以将货物放置在房间 bb,前提是房间 aabb 直接相连。完成此操作后,叉车不再携带货物并可以移动。
  2. 如果叉车位于房间 aa,货物放置在房间 bb,并且房间 aabb 直接相连,则叉车可以在不移动的情况下升起货物。完成此操作后,叉车仍然位于房间 aa 并携带升起的货物,直到放下货物之前不能移动。
  3. 如果叉车没有携带货物,则可以在走廊和房间之间移动,但不能通过放有货物的房间。

题目描述

空车在房间之间移动非常快,比升降货物的速度快得多。因此,我们假设叉车执行第一或第二操作需要一单位时间,而第三个操作是瞬时完成的。对于每个房间 p(2pn)p(2 \le p \le n),需要确定叉车从初始位置(在第一个房间且携带升起的货物)到达房间 pp 并继续携带升起的货物所需的最短时间,或者确定这是不可能的。

输入格式

每个测试由多组数据组成。第一行给出一个整数 tt1t100,0001 \le t \le 100,000),即数据的组数。接下来是每组数据的描述。

每组数据的第一行包含两个整数 nnmm2n500,000,1m500,0002 \le n \le 500,000,1 \le m \le 500,000),即仓库中房间和走廊的数量。

接下来的 mm 行每行包含两个整数 uiu_iviv_i1ui,vin,uivi1 \le u_i,v_i \le n,u_i \ne v_i),表示第 ii 条走廊连接的两个房间编号。保证每对通过走廊连接的房间只会出现一次(或者说每个走廊只输入一次)。保证如果所有房间都是空闲的,则可以通过走廊从任意房间到达任意其他房间,即由仓库简化成的图是联通的。

n\sum n 表示每一组数据中 nn 的总和,用 m\sum m 表示 mm 的总和,保证 n500,000,m500,000\sum n \le 500,000,\sum m \le 500,000

输出格式

对于每组输入,输出 n1n - 1 个数字,其中第 ii 个数字应该等于叉车从房间 11 开始到房间 i+1i+1(同时继续携带升起的货物)需要升降货物的最小次数(也就是最短时间)。如果无法实现,则第 ii 个数字应为 1-1

4
4 4
1 2
2 3
3 4
4 1
5 5
1 2
2 3
3 4
4 5
5 1
5 6
1 2
3 2
1 3
3 5
5 4
3 4
9 12
1 2
2 3
3 1
4 5
5 6
6 4
7 8
8 9
9 7
3 6
6 9
9 3
-1 2 -1
4 2 2 4
2 2 4 4
2 2 6 6 4 6 6 4

提示

部分样例解释:

在第四组数据中,为了使叉车从房间 11 开始(携带升起的货物)尽快到达房间 44(并继续携带升起的货物),可以执行以下操作:

  • 将货物放置在房间 22。需要花费一单位时间。
  • 移动到房间 33。不需要花费时间。
  • 从房间 22 中升起货物。需要花费一单位时间。
  • 将货物放置在房间 99。需要花费一单位时间。
  • 移动到房间 66。不需要花费时间。
  • 从房间 99 中升起货物。需要花费一单位时间。
  • 将货物放置在房间 55。需要花费一单位时间。
  • 移动到房间 44。不需要花费时间。
  • 从房间 55 中升起货物。需要花费一单位时间。

总共需要花费 66 个单位时间。

Subtask 分值 n\sum n\le m\sum m\le 特殊性质
11 1616 10001000 20002000
22 1818 100000100000
33 1414 50005000 500000500000
44 1717 500000500000 对于任意 1in11\le i\le n-1,存在一条走廊连接 iii+1i+1 号房间,且 11nn 号房间也有走廊连接
55 1212 每个房间最多有 33 条走廊
66 2323