QOJ.ac

QOJ

Time Limit: 2.5 s Memory Limit: 256 MB Total points: 100 Hackable ✓

#15849. Escape from Markov

Statistics

一位疯狂的术士利用科谢(Koschei)的力量,复活了一位著名的俄罗斯数学家,将其变成了一名不死巫妖。这位数学家是概率论(特别是随机过程)方面的专家,他利用自己的专业知识优化了术士私人军队的行动,使他们能够暴力夺取国家的控制权。

你是反抗军的一员,你们宣誓要推翻这位术士军阀,恢复国家的自由。如果你能摧毁存放巫妖灵魂的护命匣,那么这位数学家将再次变回凡人。随着他的首席后勤官的死亡,你预计术士的政权将会瓦解,你的国家将再次获得解放。这就是:逃离马尔可夫(Escape from Markov)。

全国共有 $n$ 座城市,编号为 $1$ 到 $n$。这些城市由 $m$ 条双向道路连接。沿任意方向穿过这些道路中的任何一条总是恰好需要 $1$ 小时。没有道路连接城市自身,且任意两座城市之间最多只有一条道路。城市间的旅行只能通过这些道路进行,并且仅使用这些道路即可从任意城市到达其他任何城市。你目前位于城市 $a$。你需要尽快到达城市 $b$,因为你知道马尔可夫的灵魂就存放在那里。

不幸的是,术士有 $p$ 辆巡逻车(正式名称为“叛乱分子抓捕警车”),它们负责监控道路。每辆巡逻车都有自己的巡逻计划,图论学家会将其描述为一个闭合回路。

每辆巡逻车都有一个包含 $l$ 座城市的访问列表,按顺序访问;当它们访问完第 $l$ 座城市后,会返回起始城市,然后重新开始巡逻。目前,每辆巡逻车都位于其列表中的第一座城市。

每个计划中任意两座连续的城市(包括第 $l$ 座和第一座城市)都由一条道路直接连接。这是因为巡逻车也只能通过与你相同的道路在城市间穿行。注意,巡逻车在其巡逻计划中可能会多次访问相同的城市或道路。它们穿过每条道路(无论方向如何)也都需要恰好 $1$ 小时。

当巡逻车离开城市并在某条道路上行驶时,该道路将变得无法通行。如果你试图在任何巡逻车位于该道路上(无论你或车辆朝哪个方向行驶)时穿过该道路,你就会被抓住,反抗行动也将失败。但是,你可以在任何城市无限期地等待和躲藏,而不会被抓住(即使此时有巡逻队经过你所在的城市)。

在这些条件下,求出你从城市 $a$ 到城市 $b$ 所需的最短时间(以小时为单位),或者报告该任务是否无法完成。

输入格式

第一行包含四个由空格分隔的整数 $n, m, p, l$。

接下来 $m$ 行,每行包含两个由空格分隔的整数 $u$ 和 $v$,表示存在一条连接城市 $u$ 和 $v$ 的双向道路。没有道路连接城市自身,且任意两座城市之间最多只有一条道路。

接下来 $p$ 行,每行对应一辆巡逻车的巡逻计划。每行包含 $l$ 个由空格分隔的整数。第一个整数是巡逻车的起始城市,后续序列描述了巡逻车按顺序访问的城市。回想一下,在访问完计划中的第 $l$ 座城市后,巡逻车会返回第一座城市并重新开始巡逻。

最后一行包含两个由空格分隔的整数 $a$ 和 $b$。

数据范围

  • $2 \le n \le 2 \cdot 10^5$
  • $n - 1 \le m \le 2 \cdot 10^5$
  • $1 \le p \le 2 \cdot 10^5$
  • $2 \le l \le 2 \cdot 10^5$
  • $p \cdot l \le 10^6$
  • 仅使用道路即可从任意城市到达其他任何城市。
  • 巡逻计划中任意两座连续城市之间都存在一条道路。
  • $a \neq b$
  • 输入中的所有城市编号均在 $1$ 到 $n$ 之间(含边界)。

输出格式

输出一个整数,表示你从城市 $a$ 到城市 $b$ 所需的最短时间(以小时为单位),如果任务无法完成,则输出 IMPOSSIBLE

样例

样例输入 1

4 4 1 4
1 2
2 3
3 4
4 1
2 1 4 3
1 3

样例输出 1

2

样例输入 2

4 4 1 4
1 2
2 3
3 4
4 1
2 1 4 3
1 2

样例输出 2

2

样例输入 3

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

样例输出 3

7

样例输入 4

2 1 1 2
1 2
2 1
1 2

样例输出 4

IMPOSSIBLE

说明

对于第一个样例输入,我们从城市 1 出发。注意,在第一个小时内,有一辆巡逻车正从城市 2 开往城市 1,所以我们不能往那个方向走。我们可以通过从城市 1 到 4,再从城市 4 到 3 来避开巡逻车,总共花费 2 小时。

对于第二个样例输入,我们本想直接前往城市 2,但有一辆巡逻车在第一个小时内监控着城市 1 和 2 之间的道路。因此,我们在城市 1 等待了 1 小时。一小时过去且巡逻车离开后,我们直接从城市 1 前往城市 2。总共花费了 2 小时。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.