题目链接:http://poj.org/problem?id=3662
思路:这题较多的有两种做法:
方法1:二分枚举最大边长limit,如果图中的边大于limit,则将图中的边当作1,表示免费使用一次,否则就当作0,这样只需判断dist[n]与k的大小,然后继续二分边长就可了。
方法2:bfs+优先队列,dp[i][j]表示到顶点i,免费使用了j条边的最小花费,于是对于下一个即将要选择的点,那么就有两种选择了,一种是免费使用这条边,另一种是不免费,则花费为q.cost=max(p.cost,w),不断进出队列更新即可。