QOJ.ac

QOJ

Limite de temps : 2.0 s Limite de mémoire : 1024 MB Points totaux : 100 Hackable ✓

#17987. Longest Path to Oblivion

Statistiques

Pyoseok 启程前往被诅咒的森林探险,以获取传闻中能赋予永生的女巫药水。

在被诅咒的森林中,有 $N$ 棵编号为 $1$ 到 $N$ 的树,树之间有双向的小路相连。Pyoseok 在树 $S$ 下开始他的冒险,并希望找到一条通往女巫小屋所在的树 $E$ 的路径。

传说被诅咒的森林中存在着一个遗忘记忆的诅咒,这使得冒险进入其中的人会漫无目的地游荡,甚至忘记自己是谁。当冒险者到达树 $i$ 下时,他们会完全忘记自己曾经访问过编号小于 $i$ 的树。

为了不迷失方向,Pyoseok 制定了一条规则:

“已经访问过的树绝不再次访问。”

由于诅咒的存在,他可能会忘记自己访问过某棵树并再次访问它,但只要他记得自己访问过某棵树,他就不会再次访问那棵树。

在他的记忆中,永恒转瞬即逝。站在女巫的小屋前,他发现了一个陌生的老人,并很快意识到那就是他自己。他曾经如此渴望的永生,如今在他衰老、腐朽的身体里不过是一个诅咒。他现在唯一想问的,就是有多少无数的岁月已经毫无意义地流逝,消失在虚无之中。

Pyoseok 目前正站在树 $E$ 下。在他访问过的树中,他所记得的树已被给出。请找出 Pyoseok 在此之前最多可能沿着小路旅行了多少次。请注意,Pyoseok 可能会多次访问树 $S$ 或树 $E$。(由于诅咒,他可能已经忘记了自己是从树 $S$ 开始的,或者他可能在没有注意到女巫小屋的情况下经过了树 $E$。)

输入格式

输入的第一行包含四个由空格隔开的整数 $N$、$M$、$S$ 和 $E$。

  • $N$ 表示被诅咒森林中的树木数量,$M$ 表示小路的数量。($2 \le N \le 100\,000$;$1 \le M \le 300\,000$)
  • $S$ 表示 Pyoseok 开始旅程的树,而 $E$ 表示女巫小屋所在的树。($1 \le S, E \le N$)

接下来的 $M$ 行输入,每行包含两个由空格隔开的整数 $a$ 和 $b$,表示由一条小路连接的两棵树。($1 \le a, b \le N$;$a \ne b$)

  • 输入中不会重复给出同一条小路。
  • 从任意一棵树出发,都可以通过一条或多条小路到达所有其他树。

输入的下一行包含 $K$,表示 Pyoseok 记得访问过的树木数量。($1 \le K \le N$)

下一行包含 $K$ 个由空格隔开的整数,表示 Pyoseok 记得访问过的树。这些数字按降序给出,且最后一个数字总是 $E$。

输出格式

输出 Pyoseok 在到达女巫小屋之前,最多可能沿着小路旅行的次数。旅行路径必须从树 $S$ 开始,在树 $E$ 结束,并且必须与 Pyoseok 的记忆相符。

如果答案大于或等于 $10^{18}$,则输出 eternity

如果不存在符合给定条件的路径,则输出 impossible

样例

输入样例 1

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

输出样例 1

10

输入样例 2

3 3 2 2
1 3
3 2
2 1
2
3 2

输出样例 2

4

输入样例 3

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

输出样例 3

impossible

输入样例 4

60 59 1 1
1 2
1 3
1 4
...
1 58
1 59
1 60
60
60 59 58 ... 3 2 1

输出样例 4

eternity

说明

在第一个样例中,按 1, 3, 2, 4, 1, 3, 2, 5, 2, 3, 2 的顺序访问树木可以得到最大移动次数。

在第二个样例中,按 2, 1, 3, 1, 2 的顺序访问树木可以得到最大移动次数。

在第三个样例中,为了到达树 1,必须访问树 3 或树 4,因此不可能记得访问过树 2。

在第四个样例中,每条小路都将树 1 与树 2, 3, 4, . . . , 60 相连,且 Pyoseok 记得访问过所有的树。最大移动次数大于或等于 $10^{18}$,因此输出 "eternity"。

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.