QOJ.ac

QOJ

Limite de temps : 0.5 s Limite de mémoire : 32 MB Points totaux : 100

#6713. 任务序列

Statistiques

Tom 从他的老板那里接到了许多任务,手动处理这些任务非常枯燥。幸运的是,Tom 拥有一台特殊的机器——高级计算机器(ACM)来帮助他。

ACM 的工作方式非常特殊。机器可以在短时间内完成一个任务,在完成一个任务后,它必须能够平滑地移动到下一个任务,否则机器会自动停止。你必须重新启动它才能使其继续工作。当然,机器不能随意地从一个任务移动到另一个任务。因此,每次启动前,必须预先安排好一个任务序列。特别地,单个任务也可以被视为一个序列。在序列中,机器必须能够从一个任务平滑地移动到它的后继任务(如果存在)。启动后,机器总是按照任务序列工作,并在完成最后一个任务时自动停止。如果并非所有任务都已完成,机器必须再次启动并按照一个新的序列工作。当然,已完成的任务不能再次被安排。

由于某些未知原因,题目保证对于任意两个任务 $i$ 和 $j$,机器要么能从 $i$ 平滑移动到 $j$,要么能从 $j$ 平滑移动到 $i$,或者两者皆可。由于启动过程非常缓慢,Tom 希望合理地安排任务序列,使得所有任务能够以最少的启动次数完成。你的任务是帮助他实现这一目标。

输入格式

输入包含多组测试数据。对于每组测试数据,第一行包含一个整数 $n$ ($0 < n \leq 1\,000$),表示 Tom 接到的任务数量。接下来有 $n$ 行,每行包含 $n$ 个由空格分隔的整数($0$ 或 $1$)。如果第 $i$ 行的第 $j$ 个整数为 $1$,则表示机器可以从任务 $i$ 平滑移动到任务 $j$,否则表示不能。任务编号从 $1$ 到 $n$。

输入以文件结束符(EOF)终止。

输出格式

对于每组测试数据,第一行输出一个整数 $k$,表示所需的最少启动次数。随后输出 $2k$ 行,用于描述这 $k$ 个任务序列。对于每个任务序列,第一行应包含一个整数 $m$,表示该序列中的任务数量;第二行应包含 $m$ 个整数,表示序列中任务的顺序。同一行中相邻的两个整数之间仅用一个空格分隔,不允许有多余空格。可能存在多种解,任何合法的解均可。

样例

样例输入 1

3
0 1 1
1 0 1
0 0 0

样例输出 1

1
3
2 1 3

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.