昂贵的聘礼 poj-1062
题目大意:原文链接?不是英文题,自己看
注释:$1le N le 100$。
想法:开始的想法有些过于简单,因为落下了一个条件:就是等级限制是一条路径上的任意两点而不是相邻两点。所以我们考虑枚举当前可接受等级的区间。显然最多只有100个,然后我们用Dijkstra或者spfa求单源最短路即可。
下面我们思考如何建图:
其中,low[i][j]表示j物品可以使得i物品降价为low[i][j],val[i]表示单独购买 i 物品所需要的金币数。
然后我们通过离散化使得所有的等级在一个递增的序列中,使得移动区间窗口使得酋长从窗口的最左端爬到最右端即可。
代码就不贴了,太丑了。
小结:这题的建图网上好像就我一个是这么建的,算了,怎么样都好吧。
错误:链式前向星中to[j]表示的是节点。在使用链式前向星中的边权数组的时候直接使用value[j]即可,而不是value[to[j]]。
Dijkstra中的源点被标记为选取是在循环里被标记,而不是手动标记,切记切记。