P13284 [GCJ 2013 Qualification] Treasure
题目描述
按照一张古老的地图,你偶然发现了臭名昭著的海盗 Larry 的秘密宝藏!
宝藏由 $N$ 个上锁的箱子组成,每个箱子只能用某一种特定类型的钥匙打开。而且,每把钥匙一旦用来打开一个箱子,就不能再重复使用。当然,每个箱子里都藏有大量宝藏,同时你还可能找到一把或多把可以用来打开其他箱子的钥匙。一个箱子里可能包含多把相同类型的钥匙,并且你可以持有任意数量的钥匙。
你一开始就至少拥有一把钥匙,你的地图还标明了各个箱子里可以找到哪些钥匙。已知所有这些信息,你能否想出一种方法,打开所有的箱子?
例如,假设宝藏由下表所示的四个箱子组成,并且你起始时恰好有一把类型为 $1$ 的钥匙:
| 箱子编号 | 打开所需钥匙类型 | 箱内钥匙类型 |
| :---: | :---: | :---: |
| 1 | 1 | 无 |
| 2 | 1 | 1, 3 |
| 3 | 2 | 无 |
| 4 | 3 | 2 |
在这个例子中,如果你按照 $2$、$1$、$4$、$3$ 的顺序打开箱子,就能全部打开。如果你一开始就打开第 $1$ 号箱子,那么你会用光唯一的一把钥匙,接下来就无法继续了。
输入格式
输入的第一行为测试用例数 $T$。接下来是 $T$ 个测试用例。每个测试用例的第一行为两个正整数 $K$ 和 $N$,分别表示你起始时拥有的钥匙数量以及需要打开的箱子数量。
接下来一行包含 $K$ 个整数,表示你起始时拥有的钥匙类型。
之后有 $N$ 行,每行描述一个箱子。每行首先是两个整数 $T_i$ 和 $K_i$,分别表示打开该箱子所需的钥匙类型,以及箱子内钥匙的数量。接下来是 $K_i$ 个整数,表示箱子内包含的钥匙类型。
输出格式
对于每个测试用例,输出一行 `"Case #x: C_1 C_2 ... C_N"`,其中 $x$ 是测试用例编号(从 $1$ 开始),$C_i$ 表示你应当打开的第 $i$ 个箱子的编号(从 $1$ 开始)。
如果存在多种打开所有箱子的方式,选择**字典序最小**的一种。也就是说,优先让 $C_1$ 尽可能小,若 $C_1$ 有多种选择,则让 $C_2$ 尽可能小,依此类推。
如果无法打开所有箱子,则输出一行 `"Case #x: IMPOSSIBLE"`。
说明/提示
**限制条件**
- $1 \leq T \leq 25$
- $1 \leq K$
- 所有钥匙类型均为 $1$ 到 $200$ 之间的整数
**小数据集(20 分,测试集 1 - 可见)**
- $1 \leq N \leq 20$
- 每个测试用例中,所有钥匙总数不超过 $40$
**大数据集(60 分,测试集 2 - 隐藏)**
- $1 \leq N \leq 200$
- 每个测试用例中,所有钥匙总数不超过 $400$
翻译由 ChatGPT-4.1 完成。