#aBC291F. [ABC291F] Teleporter and Closed off

[ABC291F] Teleporter and Closed off

AT_abc291_f [ABC291F] Teleporter and Closed off

题目描述

NN 个城市,编号为城市 11、城市 22\ldots、城市 NN
有一些不同城市之间可以通过单向传送器进行移动。对于每个城市 ii1iN1\leq i\leq N),可以通过长度为 MM 的仅由 01 组成的字符串 SiS_i 来表示城市 ii 通过传送器可以直接到达的城市。具体来说,对于 1jN1\leq j\leq N

  • 如果 1jiM1\leq j-i\leq MSiS_i 的第 jij-i 个字符为 1,则可以从城市 ii 直接移动到城市 jj
  • 否则,不能从城市 ii 直接移动到城市 jj

对于 k=2,3,,N1k=2,3,\ldots,N-1,请解决以下问题:

通过重复使用传送器,不经过城市 kk,能否从城市 11 移动到城市 NN?如果可以,请输出所需传送器使用次数的最小值;如果不可以,输出 1-1

输入格式

输入以以下格式从标准输入给出。

NN MM
S1S_1
S2S_2
\vdots
SNS_N

输出格式

请将 N2N-2 个整数以空格分隔输出在一行。第 ii1iN21\leq i\leq N-2)个数为对应 k=i+1k=i+1 的问题答案。

输入输出样例 #1

输入 #1

5 2
11
01
11
10
00

输出 #1

2 3 2

输入输出样例 #2

输入 #2

6 3
101
001
101
000
100
000

输出 #2

-1 3 3 -1

说明/提示

限制条件

  • 3N1053\leq N\leq 10^5
  • 1M101\leq M\leq 10
  • M<NM<N
  • SiS_i 是仅由 01 组成的长度为 MM 的字符串
  • i+j>Ni+j>N,则 SiS_i 的第 jj 个字符为 0
  • N,MN,M 为整数

样例解释 1

通过传送器,每个城市可以直接到达以下城市:

  • 城市 11 可以到达城市 2,32,3
  • 城市 22 可以到达城市 44
  • 城市 33 可以到达城市 4,54,5
  • 城市 44 可以到达城市 55
  • 城市 55 无法到达其它城市。

因此,从城市 11 到城市 55 的路径有:

  • 路径 11:城市 12451\to 2\to 4\to 5
  • 路径 22:城市 13451\to 3\to 4\to 5
  • 路径 33:城市 1351\to 3\to 5

不经过城市 22 的路径有路径 22 和路径 33,其中最少使用传送器次数的是路径 33,共 22 次。 不经过城市 33 的路径只有路径 11,共 33 次。 不经过城市 44 的路径只有路径 33,共 22 次。

因此,依次输出 2,3,22,3,2

样例解释 2

从城市 11 到城市 66 只有一种方式:城市 12561\to 2\to 5\to 6,因此对于 k=2,5k=2,5,不存在不经过城市 kk 的路径;对于 k=3,4k=3,4,上述方式满足条件,传送器使用次数为 33

因此,依次输出 1,3,3,1-1,3,3,-1

注意,由于传送器是单向的,虽然可以从城市 33 到城市 44,但不能从城市 44 到城市 33,因此不能通过城市 14361\to 4\to 3\to 6 这样的方式移动。

由 ChatGPT 4.1 翻译