#SZSY1007. 宝藏解锁
宝藏解锁
题目描述
有 个宝箱,编号为 ,初始都上锁。宝箱 中有一枚编号为 的金币。获得某个宝箱的钥匙后,就可以免费打开它并取出其中的金币。
你可以支付已经获得的金币 ,一次购买宝箱 的全部钥匙,其中 。支付会消耗这枚金币;同一个宝箱中的金币只能获得一次。已经获得的钥匙以及已经打开的宝箱不会因支付而失去。
有 个互相独立的询问。每个询问给定一个编号 :假设初始只拥有宝箱 的钥匙,没有任何金币,最少需要支付多少枚金币,才能打开全部 个宝箱?无法做到时输出 。
每次支付计为一枚金币,金币的编号不是它的价值。
输入格式
从标准输入读入。
第一行包含整数 。
接下来 行,第 行包含两个整数 。
接下来一行包含整数 。
接下来 行,每行包含整数 ,表示一个询问。
输出格式
向标准输出写出 行,依次回答各个询问。每行输出最少支付的金币枚数;无法打开全部宝箱时输出 。
数据范围
所有输入均为整数,满足:
- ;
- ;
- ;
- 每次询问满足 。
子任务
| 编号 | 分值 | 缩减范围 |
|---|---|---|
| 1 | 5 | (所有询问) |
| 2 | 15 | |
| 3 | ||
| 4 | 5 | |
| 5 | 15 | |
| 6 | ||
| 7 | 30 | — |
样例 1
4
1 3
2 4
2 3
4 4
1
1
2
样例 1 说明
先打开宝箱 ,支付金币 获得宝箱 的钥匙;打开宝箱 后支付金币 ,即可再获得宝箱 的钥匙。共支付 枚金币。只支付金币 还不能打开宝箱 。
样例 2
5
1 5
2 4
2 3
3 5
1 5
1
3
4
样例 2 说明
初始打开宝箱 。可以依次支付金币 :可打开的宝箱范围依次变为 、、、。前两次支付只能依次选择能扩展范围的金币 ;随后还必须先打开宝箱 才能获得宝箱 的钥匙,因此需要 枚金币。
样例 3
5
1 1
2 3
1 5
3 4
5 5
5
1
2
3
4
5
-1
2
1
2
-1
样例 3 说明
从宝箱 出发,支付金币 即可打开所有宝箱。从宝箱 或 出发,可以先取得宝箱 中的金币,再支付它,共用 枚金币。宝箱 和 中的金币分别只能换到本箱的钥匙,从它们出发都无法继续扩展。