#P16766. [GKS 2020 #E] Golden Stone
[GKS 2020 #E] Golden Stone
题目描述
Leopold 的朋友 Kate 喜欢石头,于是他决定送她一块金石作为礼物。石头共有 种类型,编号为 到 ,其中 号是金石。城市中不同地点可以免费获得某些类型的石头。城市由 个路口(编号 到 )和 条连接不同路口对的双向街道组成。在每个路口,有零种或多种类型的石头无限量供应。
不幸的是,金石在任何路口都没有供应。幸运的是,Leopold 会一点魔法,他知道如何将一组石头组合并变成另一种石头。例如,他有一个配方可以用一块银石和两块大理石制成一块金石。他可以在某些路口收集这些石头(如果当地有供应),或者使用他的其他众多配方来生产这些石头中的任何一种。形式化地说,Leopold 有 个配方,每个配方形式为 ,其中 。如果 Leopold 在某个路口收集了 块类型分别为 的石头,他可以选择应用这个配方,将这些石头变成一块类型为 的石头。
Leopold 喜欢解谜远胜于体力活动,因此他不想不必要地带着石头在城市里跑来跑去。携带一块石头穿过一条街道需要花费 单位能量。Leopold 一次最多只能携带一块石头,但他可以在任何路口放下石头,并在以后任意时间捡起。
Leopold 至少需要花费多少能量才能生产出一块金石?
Leopold 非常害怕大数字。如果答案大于等于 ,则输出 。
输入格式
输入的第一行给出测试用例的数量 。接下来有 个测试用例。每个测试用例的第一行包含四个整数 、、 和 ,分别表示路口的数量、街道的数量、石头的种类数以及配方的数量。接下来的 行描述城市的地图。其中第 行包含两个不同的整数 和 ,表示第 条街道连接的两个路口。
随后的 行描述每个路口可用的石头类型。第 行以该路口可用的石头类型数量 开头,后面跟着 个互不相同的整数(范围在 ),列举这些石头类型。金石(编号 )永远不会出现在任何路口的供应中。
每个测试用例的最后 行描述 Leopold 的魔法配方。第 行以该配方所需的原料石头数量 开头,后面跟着 个不一定互不相同的整数(范围在 ),列举所需原料的类型。该行以一个整数结尾(范围在 ),表示应用该配方后产出的石头类型。例如,3 6 5 6 3 表示一个配方需要两块类型 的石头和一块类型 的石头,产出类型 的石头。
保证在每个测试用例中都能生产出一块金石。
输出格式
对于每个测试用例,输出一行,格式为 Case #x: y,其中 是测试用例编号(从 开始), 是该测试用例的答案,即 Leopold 至少需要花费的能量值。如果答案大于等于 ,则输出 。
3
4 3 4 1
1 2
1 3
1 4
0
1 2
1 3
1 4
3 2 3 4 1
4 3 4 1
1 2
1 3
1 4
0
2 2 3
1 3
1 4
3 2 3 4 1
2 1 4 2
1 2
2 2 3
1 4
3 2 3 4 1
2 2 3 4
Case #1: 3
Case #2: 2
Case #3: 0
提示
在第一个测试用例中,达到最小能量的方式是:Leopold 分别在路口 、 和 收集石头 、 和 ,将这些石头带到路口 ,然后使用他唯一的配方将这三块石头变成金石。这样,三块石头各自沿一条街道运输,因此总能量花费为 。
前两个测试用例的唯一区别是:现在路口 也供应石头 。这时,最优方案是将一块类型 的石头从路口 运到路口 (花费 单位能量),然后在路口 收集缺少的类型 和 的石头,使用唯一的配方生产金石。
在第三个测试用例中,Leopold 无需离开路口 就能生产金石。首先,他收集类型 和 的石头,使用第二个配方生产类型 的石头。第二步,他再次收集类型 和 的石头,与类型 的石头组合,使用第一个配方生产金石。
限制条件
。
,。
。
。
每对路口之间最多有一条街道。
从任意路口出发,可以沿一系列街道到达任何其他路口。
保证可以生产出一块金石。
测试集 1
。
。
。
。
测试集 2
。
。
。
。
翻译由 DeepSeek V4 Pro 完成