![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
最短路
小蒟蒻pbc
2018-2022 北京师范大学人工智能学院(本科)
2022-2027 北京大学智能学院(直博)
展开
-
Returning Home(建图、最短路)
Returning Home题意数据范围思路代码题意给定一个n∗nn*nn∗n的网格,在这个网格中给出两个坐标,分别作为起点和终点。并且在图中存在mmm个传送阵,传送阵的坐标已知。从起点开始向终点走,相邻两个位置之间花费一个单位,如果走到与某个传送阵同行或者同列,那么可以不耗花费的传送到那个传送阵的位置。问从起点到终点,最少花费多少单位。数据范围1≤n≤1091 \leq n \leq 10^91≤n≤1090≤m≤1050 \leq m \leq 10^50≤m≤105思路如果传送阵直接建一原创 2020-10-10 19:17:56 · 2157 阅读 · 0 评论 -
分层图最短路学习笔记
分层图最短路一、分层图用分层图的几种情况二、经典例题例1. 小雨坐地铁例2. 飞行路线一、分层图分层图是指有很多个平行的图,各个平行的图之间有特殊的连接边。用分层图的几种情况有kkk个不同集合的边,将每个集合内的边建成一张图,再建立第k+1k+1k+1个图,是一个虚层,用这个虚层将这kkk张图连接起来。每次可以通过虚层转移到另一个集合的图中。有kkk个机会使得走当前此边不花费代价或花费特殊的代价,可以建立kkk张相同的该图,每张图之间用有边的点连接起来,其代价是000或是特殊的值。每向下走一层,转载 2020-10-02 11:08:47 · 275 阅读 · 0 评论 -
关键结点(最短路+割点+建图)
关键结点题意数据范围思路代码题意一个含有nnn个结点mmm条边的无向有权图,判断每个结点是否在111到nnn的最短路径上。如果该结点不可能出现在从111到nnn的最短路径上,输出000。如果该结点出现在所有从111到nnn的最短路径上,输出111。如果该结点出现在部分从111到nnn的最短路径上,输出222。数据范围1≤T≤10001 \leq T \leq 10001≤T≤10002≤n≤10002 \leq n \leq 10002≤n≤1000n−1≤m≤2∗105n - 1 \le原创 2020-09-28 16:26:24 · 222 阅读 · 0 评论 -
道路与航线(最短路+拓扑排序)
道路与航线题意数据范围思路(参考acwing)代码题意有一些有向边,还有一些无向边,已知不存在回路,求起点到其他各点的最短距离。数据范围卡spfa思路(参考acwing)这题脑洞比较大,但是思想较为深刻。因为不存在回路,所以可以将一些通过无向边相连的点看成一个块,然后这些块通过有向边形成一个有向图。也就是说,局部是无向图,全局是有向图。然后,对全局做拓扑排序,块的内部做Dijkstra。算法步骤如下:先输入所有双向道路,然后等方式求出所有连通块,计算出两个数组:每个点属于哪个连通块,每个连原创 2020-09-15 20:08:24 · 249 阅读 · 0 评论 -
通信线路(最短路+二分、二维最短路、分层图最短路)
通信线路题意做法代码1(Dijkstra)代码2(spfa)题意给定一个无向图,可以选择一条线路,将其kkk条边边权变为000,使得剩下边的边权最大值最小。求这个最小值。做法一看最大值最小,首先考虑二分,二分答案。二分过程中,如果大于midmidmid的边数大于kkk,那么这个最小值一定大于当前二分到的答案。代码1(Dijkstra)#include <iostream>#include <cstdio>#include <cstring>#includ原创 2020-09-15 18:42:05 · 292 阅读 · 0 评论 -
昂贵的聘礼(最短路、建图)
昂贵的聘礼题意做法代码收获题意有若干物品,这些物品都有一个价格,还有拥有者的等级(目标点的等级最高),然后还会有若干替代品以及优惠后的价格。每个物品购买的时候最多只能使用一种它的替代品。交换的时候,参与交换的所有所有者的等级差有一个上限。问,交换到目标物品,最少需要多少钱。做法可以考虑这样建图,每件物品的替代品可以连一条通向该物品的有向边,边权为优惠后的价格。并且设立一个虚拟源点,连向所有物品,边权为这些物品的价格。问题就转化成了,从虚拟源点到目标点的最短路。下面考虑等级差的限制问题,因为目标点的等原创 2020-09-15 17:37:37 · 147 阅读 · 0 评论 -
最优乘车(建图,最短路)
最优乘车题意思路代码收获题意给定若干站点,若干条单程路线,问从起点到终点最少要换乘几次。思路换乘多少次可以转换为乘坐过多少次车减1。在同一条路线中,任意一个在此路线上的车站均能沿着该路线的方向到达后面的车站。因此我们可以这样建图,建立一个有向图,如果一个点能仅通过一次车就到达另一个点,那么就连一条边,如果不能通过一次车到达,那么就不连边。这样问题就转化为了,起点到终点的最短路问题。代码#include <iostream>#include <cstdio>#inclu原创 2020-09-14 22:46:44 · 217 阅读 · 0 评论 -
最小花费(乘法最短路)
最小花费题意思路代码收获题意给定一个无向图,边权为wi(0≤wi≤1)w_i(0\leq w_i\leq1)wi(0≤wi≤1)。定义两点之间的距离为路径上所有权值的乘积。求两点之间的最长路。思路假设距离为w1w2…wkw_1w_2\dots w_kw1w2…wk,可以对其取对数处理,即logw1w2…wk=logw1+logw2+…logwk\log w_1w_2\dots w_k = \log w_1 + \log w_2 + \dots \log w_klogw1w2…w原创 2020-09-14 22:21:41 · 514 阅读 · 0 评论