QOJ.ac

QOJ

时间限制: 2 s 内存限制: 1024 MB 总分: 100

#12161. 有向汉诺塔

统计

“有向汉诺塔”的游戏棋盘由编号为 $1$ 到 $N$ 的 $N$ 根柱子组成。在某些柱子对之间存在有向边,且总是从编号较小的柱子指向编号较大的柱子。初始时,在柱子 $1$ 上有 $K$ 个大小从 $1$ 到 $K$ 的圆盘,按从大到小的顺序(从底向上)排列。游戏的目标是将所有圆盘移动到柱子 $N$ 上。

在单次移动中,你可以将位于某根柱子 $A$ 顶部的圆盘移动到另一根柱子 $B$ 的顶部,前提是存在一条从柱子 $A$ 到柱子 $B$ 的路径(不一定是单条边),并且柱子 $B$ 为空,或者柱子 $B$ 当前顶部的圆盘比正在移动的圆盘大。路径上经过的柱子中已有的圆盘大小不影响移动。

你的任务是,给定一个有向汉诺塔棋盘,确定能实现游戏目标(即将所有 $K$ 个圆盘移动到柱子 $N$ 上)的最大 $K$ 值。可以证明,圆盘的最大数量总是有限的。

输入格式

输入的第一行包含两个整数:$N$ ($2 \le N \le 500$) 和 $M$ ($0 \le M \le N(N - 1)/2$),分别表示柱子的数量和边的数量。

接下来的 $M$ 行,每行描述一条边,包含两个整数 $a_i$ 和 $b_i$ ($1 \le a_i < b_i \le N$),表示柱子 $a_i$ 和 $b_i$ 之间有一条有向边。每对柱子在输入中最多出现一次。

输出格式

输出一个整数,表示在给定的有向汉诺塔棋盘上,能够将 $K$ 个圆盘从柱子 $1$ 移动到柱子 $N$ 的最大可能 $K$ 值。

样例

输入格式 1

5 4
1 2
2 3
3 4
4 5

输出格式 1

5

输入格式 2

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

输出格式 2

5

输入格式 3

2 0

输出格式 3

0

说明

在第一个样例中,将 $5$ 个圆盘从柱子 $1$ 移动到柱子 $5$ 的移动序列示例如下:

柱子 1: 54321, 5432, 543, 543, 54, 5 柱子 2: 1, 1, 3, 3, 3, 3, 3 柱子 3: 2, 21, 21, 21, 21, 21, 2, 2 柱子 4: 4, 4, 1, 1, 1 柱子 5: 5, 54, 54, 543, 5432, 54321

在第三个样例中,由于没有边,因此无法移动任何圆盘。

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.