简单
热浪
传送门
题意:带权无向图,n 个点 m 条边,求两点间距离,数据不会爆int
做法:dijkstra跑一边即可
信使
传送门
题意:求起始点到其他点最短距离中的最长距离,无法到达的不算
做法:dijkstra跑后求max
香甜的黄油
传送门
题意:求一个点到其他点的距离和最短
做法:数据量小,对每一个点跑dijkstra求和取min
最小花费
传送门
题意:两人转账会扣除一定比例的手续费,问终点想要得到100元钱需要起点拿出多少钱
做法:给起点赋值100元,每走到下一个点都要减去需要收取的手续费,求最大路,可以求出起点100元时终点的金额,所以答案是 100 * 100 / ans
选择最佳线路
传送门
题意:给定一张图,已知终点和 k 个起点,找一个路径长度最短的起点
做法:建反图dijkstra跑一边即可
中等
昂贵的聘礼
传送门
题意:给定 n 个物品,每个物品都有自己的价值,部分物品之间可以通过花额外的钱来交换,例如:i 号物品价值为 x,j 号物品价值为 y,想要获得 i 可以花费 x 元或者用 j 号物品 + z 元去换。除此之外,每个物品都有自己的等级,只有等级不超过一定范围的物品才可互相交换,间接或直接与范围外等级的物品交换都不行,问想要获得第1号物品所需要花费的最小金额
做法:难度在于建图,设起始点为 0,0点不是任何物品,且与其他所有点都有一条边,边权为每个点的价值,当 i 与 j 有交易关系时应该建一条 j 到 i 的边,边权为 z,然后暴力枚举等级范围从 0 点开始跑dijkstra,取min。
观光
传送门
题意:给定图,求最短路的方案数 + 最短路长度-1的方案数
做法:相当于求一条最短路和次短路,只有次短路长度 == 最短路 - 1 时才能将次短路方案加到答案里。dist数组第二维中 0 代表最短路,1 代表次短路。分为以下几种情况。
1、当前最短路可更新,那么次短路更新为当前最短路,然后最短路更新
2、最短路不可更新,次短路可更新,更新次短路即可
G - Easy Glide
传送门
题意:在二维坐标系上,已知起点和终点坐标,以及 n 个加油站,汽车经过每个加油站会加速 3 秒,已知正常速度 v1 和 加速速度 v2,问起点到终点的最短时间( n <= 1000)
做法:n 只有 1000,那么可以构建一个完全图,共 n + 2 个点,点 n + 1 为起点,点 n + 2 为终点,两点之间的权值是从一点到另一点的时间,起点到其他点速度始终为 n1,其余 n + 1 个点之间的路径长度需要考虑加速速度,建出图后跑朴素 dijkstra 即可