#P5508. 寻宝
寻宝
题目背景
Steve成功打开了机关,发现机关后是一个巨大的迷宫
题目描述
这个迷宫一共有个洞穴,洞穴之间有很多单向隧道,很难数清
但经过分析,发现:
这些隧道可以分为组,对于每一组,编号在区间内的每一个洞穴,与编号在区间内的每一个洞穴之间,都有一条隧道,每组内共有条隧道,通过同组内每一条隧道的时间都相等
为了进一步节约时间,Steve可以挖掘新的隧道
但是,每个洞穴的性质不同,导致挖掘隧道的难度不同,有些洞穴甚至无法挖掘隧道
具体来说,第个洞穴有一个值,表示无法挖掘隧道,对于其它值,表示从第个洞穴开始,挖掘一条到第个洞穴的隧道,并到达第个隧道,需要花费时间
Steve希望在最短时间内到达第个洞穴,决定不限制挖掘隧道的数量
现在,你需要告诉Steve最少需要用的时间
如果可能,你应帮助Steve求出一种最优方案
输入格式
第一行两个整数
接下来一行个整数
接下来行,每行描述一组隧道
每行个整数,其中表示通过时间
输出格式
如果无解,则只需输出一行一个整数"-1"(不含引号)
如果有解,则按下列格式输出:
第一行一个整数,表示最少花费的时间
如果你无法给出方案,在第二行输出一个整数
如果你可以给出方案,在第二行输出一个整数,在第三行输出个整数,依次表示一种最优方案经过的洞穴编号
你并不需要告诉Steve经过的隧道是否为挖掘出来的,或者属于哪一组
6 2
0 1 2 0 0 0
1 1 2 3 5
4 5 6 6 2
9
3
1 2 6
6 2
0 1 2 0 0 0
1 1 2 3 5
4 5 6 6 2
9
4
1 3 4 6
提示
样例1:1号到2号走第一组隧道,2号到6号挖掘隧道,用时
样例2:1号到3号走第一组隧道,3号到4号挖掘隧道,用时,4号到6号走第二组隧道
每个Subtask包括两个测试点,取较低分
对于每个测试点:
如果输出格式错误,那么,该测试点得0分
如果你没有给出正确的用时,那么,该测试点得0分
如果你给出正确的用时,但没有给出方案,那么你可以得到该测试点一半的分数(每个测试点得分向下取整)
如果你给出了错误方案,那么你可能可以得到该测试点一半的分数,或者得0分
如果你给出了正确的方案,那么你可以得到该测试点全部的分数
上面两个输出都可以得到满分,还有一种方案是
如果你输出:
9
0
那么你可以得到该测试点一半的分数
数据范围:
Subtask | 分值 | n | m | 特殊性质 |
---|---|---|---|---|
1 | 5 | 100 | ||
2 | 10 | 3000 | ||
3 | 11 | 50000 | 50000 | 2,3 |
4 | 10 | 1 | ||
5 | 12 | 0 | ||
6 | 1 | |||
7 | 13 | 20 | 3 | |
8 | ||||
9 | 14 | 50000 |
特殊性质1:所有
特殊性质2:所有,为常数
特殊性质3:所有
保证存在到达号洞穴的方案
关于输出错误方案:
如果输出的,经过的点以开头,以结尾,且中间的点都是在的整数,则这组解可能是一组最优解,可以得到一半分数
否则,得0分
不用担心spj会TLE/MLE