G. Reducing Delivery Cost(思维+最短路)
本文共 1700 字,大约阅读时间需要 5 分钟。
思路:开始看到了路线免费,以为是出了分层最短路板子,看了看发现只让一条路免费。
开始直接考虑暴力,枚举每条边,然后每个点进行dijkstra,最后取最小。复杂度O(n^2klogm);
考虑一下对每个点其实可以先预处理,提前处理好每个点的对应的最短路。O(n^2logm)
考虑免费的边的贡献。
对每一个ki来说,边(a,b)有三种情况。
1.开始不在其最短路路径上,免费后也不在其最短路路径上。
2.开始不在其最短路路径上,免费后在其最短路路径上。
3.开始在其最短路路径上,免费后在其最短路路径上。
对于第一种情况,ki的最短路长度不变,仍然是原来的dis[ki.first][ki.second] (ki.first和ki.second分别代表其起点和终点)
对于第二三种情况,ki的最短路长度可能变化,dis[ki.first][a]+dis[ki.second][b];dis[ki.first][b]+dis[ki.second][a];
那么枚举边,再枚举每个k,求出总和的最小.
总时间复杂度O(mk+n^2logm)
#include #include #include #include #include #include
转载地址:http://twct.baihongyu.com/