#P10433. [JOISC 2024 Day2] 棋盘游戏
[JOISC 2024 Day2] 棋盘游戏
题目描述
有一个供 个玩家玩的棋盘游戏。该游戏的棋盘由 个编号从 1 到 的单元格和 条编号从 1 到 的路径组成,其中路径 ()双向连接着单元格 和 。
棋盘上有两种类型的单元格:重新激活单元格和停止单元格。
这些信息由长度为 的字符串 给出, 由 和 组成,其中 的第 个字符()是 '0' 表示单元格 是重新激活单元格,是 '1' 表示单元格 是停止单元格。
这个棋盘游戏由编号从 到 的 个玩家进行。每个玩家都有自己的棋子,游戏从每个玩家将其棋子放在特定的单元格上开始。一开始,玩家 ()将其棋子放在单元格 上。注意,多个玩家的棋子可以放在同一个单元格上。
游戏随着每个玩家轮流进行而进行,从玩家 1 开始,按数字顺序进行。在玩家 完成其回合后,玩家 开始回合(如果 ,则玩家 1 开始回合)。每个玩家在其回合上执行以下操作:
- 选择与其棋子所在的单元格通过一条路径相连的一个单元格,并将其棋子移动到所选择的单元格上。
- 如果目标单元格是重新激活单元格,则重复步骤 1 并继续其回合。如果目标单元格是停止单元格,则结束其回合。
代表日本参加这个棋盘游戏的包括 JOI 君在内的由 名成员组成的团队,正在研究协作策略,以快速征服这个游戏。他们目前正在研究以下问题:
为了将玩家 1 的棋子放置在单元格 上, 名玩家需要的最小总移动次数是多少?即使在回合中途,如果玩家 1 的棋子被放置在单元格 上,也认为满足条件。
给定关于游戏棋盘和每个玩家棋子的初始放置位置的信息,编写一个程序来计算每个 对应的问题的答案。
输入格式
从标准输入中读取以下数据:
- ...
输出格式
输出 行。在第 行()上,输出 个玩家将玩家 1 的棋子放在单元格 上所需的最小总移动次数。
5 5 2
1 2
2 3
2 4
3 5
4 5
00000
1 5
0
1
2
2
3
5 5 2
1 2
2 3
2 4
3 5
4 5
01000
1 5
0
1
4
4
5
5 5 2
1 2
2 3
2 4
3 5
4 5
01100
1 5
0
1
3
3
4
8 7 5
1 3
5 7
4 6
2 6
2 3
7 8
1 5
10011010
4 6 4 7 1
4
2
3
0
10
1
17
24
12 13 3
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
1 10
2 9
7 12
11 12
110000011101
1 9 11
0
1
4
5
6
7
8
8
4
1
13
9
提示
样例解释 1
由于玩家 的棋子从单元格 开始,所以 的答案是 。
对于 ,在第一步中,玩家 可以将他的棋子从单元格 移动到单元格 。因此, 的答案是 。
对于 ,他们可以通过以下 步将玩家 的棋子放置在单元格 上:
- 在第一步中,玩家 将他的棋子从单元格 移动到单元格 。由于单元格 是一个激活单元格,因此玩家 的回合继续。
- 在第二步中,玩家 将他的棋子从单元格 移动到单元格 。
由于他们无法在 步或更少的步骤中将玩家 的棋子放置在单元格 上,所以 的答案是 。
类似地,可以验证 的答案为 , 的答案为 。
这个样例输入满足子任务 的约束。
样例解释 2
对于 ,他们可以通过以下 4 步将玩家 的棋子放置在单元格 上:
- 在第一步中,玩家 将他的棋子从单元格 移动到单元格 。由于单元格 是一个停止单元格,接下来轮到玩家 。
- 在第二步中,玩家 将他的棋子从单元格 移动到单元格 。由于单元格 是一个激活单元格,玩家 的回合继续。
- 在第三步中,玩家 将他的棋子从单元格 移动到单元格 。由于单元格 是一个停止单元格,接下来轮到玩家 。
- 在第四步中,玩家 将他的棋子从单元格 移动到单元格 。
由于他们无法在 步或更少的步骤中将玩家 的棋子放置在单元格 上,所以 的答案是 。
这个样例输入满足子任务 的约束。
样例解释 3
这个样例输入满足子任务 的约束。
样例解释 4
这个样例输入满足子任务 的约束。
样例解释 5
这个样例输入满足子任务 的约束。
约束条件
- ()
- ,()
- 可以通过经过多条路径从任何单元格到达任何其他单元格。
- 是长度为 的由 '0' 和 '1' 组成的字符串。
- ()
- 、 和 都是整数。
- 和 是整数()。
- 是整数()。
子任务
- (3 分) 没有终止单元格。
- (7 分) 恰好有一个终止单元格。
- (7 分) 恰好有两个终止单元格。
- (19 分) ,,
- (23 分)
- (9 分)
- (23 分) ,,
- (9 分) 没有额外的约束。