欢迎来到起遇信息学
起遇信息学正处于上线筹建阶段,以下功能已全部开放免费体验: ✅ 完整题库浏览与代码提交评测(C / C++ / Python / Java 等) ✅ 入门到进阶的系列课程试读、作业与考试 ✅ AI 提示、AI 作业分析等智能助教功能 ✅ 赛事模拟与个人能力报告 ✅ 邮箱注册开放 ⏳ 付费课程订阅与微信/支付宝支付通道 ⏳ 手机号登录,微信扫码登录、微信公众号绑定 使用中如遇任何问题,欢迎通过页面底部 **"联系我们"** 与我们沟通。
CF1851E.Nastya and Potions
Nastya and Potions
题目描述
炼金术士 Nastya 喜欢混合药剂。总共有 种药剂,第 种药剂可以花费 枚金币直接购买。
每种药剂至多可以通过一种方式由其他若干种药剂混合而成。混合过程中用到的药剂会被消耗。此外,没有任何一种药剂能够通过一次或多次混合过程从自身得到。
作为经验丰富的炼金术士,Nastya 已经无限拥有 种药剂,编号分别为 ,但她还不确定接下来想要获得哪一种。为了做出决定,她请你对于每个 ,求出她为了获得第 种药剂所需要花费的最少金币数。
输入
第一行包含一个整数 ()—— 测试用例的数量。
每个测试用例描述如下:
第一行包含两个整数 和 ()—— 药剂的总种类数以及 Nastya 已经拥有的药剂种类数。
第二行包含 个整数 ()—— 购买每种药剂的费用。
第三行包含 个互不相同的整数 ()—— Nastya 已经无限拥有的药剂的编号。
接下来有 行,描述每种药剂的混合方式。
每行以一个整数 ()开头—— 表示合成第 种药剂所需的材料种类数()。
接着该行包含 个互不相同的整数 (,)—— 合成第 种药剂所需的材料药剂编号。如果该列表为空,则说明第 种药剂只能通过购买获得。
保证没有任何一种药剂能通过一次或多次混合从自身得到。
保证所有测试用例的 之和不超过 。同样,所有测试用例的 之和也不超过 。
输出
对于每个测试用例,输出 个整数 —— Nastya 为了获得每种药剂所需花费的最少金币数。
样例
样例 1
输入:
4
5 1
30 8 3 5 10
3
3 2 4 5
0
0
2 3 5
0
3 2
5 143 3
1 3
1 2
0
2 1 2
5 1
5 4 1 3 4
2
2 4 5
3 3 5 4
2 1 4
1 5
0
4 2
1 1 5 4
2 4
3 2 4 3
0
2 2 4
1 2
输出:
23 8 0 5 10
0 143 0
5 0 1 3 4
0 0 0 0
样例 2
输入:
3
6 3
5 5 4 5 2 2
3 4 5
2 2 5
1 5
3 4 1 6
4 2 6 1 5
0
0
6 2
1 4 4 1 5 2
3 6
4 6 3 4 5
4 6 5 3 4
0
1 5
1 6
0
2 1
4 3
1
0
1 1
输出:
0 0 0 0 0 2
0 0 0 0 0 0
0 0
样例解释(第一个样例的第一个测试用例)
最优方案如下:
- 第一种药剂:通过购买并混合第 、、 种药剂来获得;
- 第二种药剂:只能通过购买获得;
- 第三种药剂:Nastya 已经无限拥有;
- 第四种药剂:直接购买比购买材料再混合更划算;
- 第五种药剂:只能通过购买获得。
在线编程 IDE
建议全屏模式获得最佳体验
| 进入全屏编程 | Alt+E |
| 递交评测 | Ctrl+Enter |
| 注释/取消注释 | Ctrl+/ |
| 缩放字体 | Ctrl+滚轮 |