![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
最短路问题
w_uxidixi
nnzncf
展开
-
CodeForces - 1422D - Returning Home 建图
CodeForces - 1422D - Returning Home 建图 题意:给出起点和终点和m个跳跃点,跳跃点的定义是:只要主人公当前位置(x,y)(x,y)(x,y)的横坐标或纵坐标最少一个与跳跃点坐标(xi,yi)(x_i,y_i)(xi,yi)的相同就可以直接到跳跃点上。 想不出来 又是抄的题解 思路:由于在x坐标下,可以随意到达该x坐标下的任何的跳跃点,花费为0,所以将x坐标拆成m个点,只有跳到不同的x坐标下才会产生花费。同理y坐标。 拆顶点:规定起点为000,终点为3m+13m+13m原创 2020-10-10 17:06:59 · 197 阅读 · 0 评论 -
CodeForces - 1307D Cow and Fields 最短路
CodeForces - 1307D Cow and Fields 最短路 题意: 给出n个点m条边的连通图,给出k个关键点的编号,以两个关键点连边,问从1到n的最短路最大是多少 现假设: d1[i]d1[i]d1[i]表示从1到i的最短距离 d2[i]d2[i]d2[i]表示从n到i的最短距离 做法:分两种情况: 1.这两个关键点,如果对原来的最短路没有影响,则ans=d1[n]ans=d1[n...原创 2020-02-19 14:01:25 · 218 阅读 · 0 评论 -
P1119 灾后重建 floyd
P1119 灾后重建 floyd 好久没写floyd都快忘记这个有这个算法了 做法: 跑floyd不断缩距离,floyd的核心是对k=[1,n]k=[1,n]k=[1,n]的点暴力枚举作为中转点,优化距离d[i][j]=min(d[i][j],d[i][k]+d[k][j])d[i][j]=min(d[i][j],d[i][k]+d[k][j])d[i][j]=min(d[i][j],d[i][k...原创 2020-02-12 13:46:13 · 156 阅读 · 0 评论 -
虚点建边例题
P3958奶酪 题意 给出N个小洞,以及坐标,半径 只有相互接触的小洞才可以运动 问能不能从z=0运动到z=h 建边 如果我们的顶点是1——N的话 现在多造一个0点表示最底层,所有和底部连接的连一条边 N+1表示最上层,所有和上层相连接的连一条边 这样时间复杂度就减少了很多很多很多 只要0——N+1 用一个SPFA就可以了 注意 另外这个数据我双双双忘记LL了 /** * Author1: l...原创 2019-08-22 16:06:56 · 289 阅读 · 0 评论 -
The Shortest Path in Nya Graph虚点建边
The Shortest Path in Nya Graph 虚点建边 题意:给出N个点,除了给出的M条无向边外,他们每个点位于第Li层楼,第Li层楼上的可以到它上面一层上的点或者下面一层的点,距离为C,Li<=N<=1e5 如果你把每个点都存到vector里面,vector[i]里面记录第i层上的点,然后两个for语句暴力连点就是N^2复杂度,最坏的情况就是第一层楼有1e5/2个点,...原创 2019-08-12 15:29:17 · 186 阅读 · 0 评论 -
LightOJ 1074 Extended Traffic
LightOJ 1074 Extended Traffic 题意:给出N个城市和M条有向边,边权有正有负,给出K个判断x,问从1到这个点x最短距离,且d[x]不能小于3 分析:既然有负边就应该考虑负环,我一开始没想到这个坑,如果一个点在负环中的话,就不符合条件,所以应该负环中所有的点都找出来,这些点都肯定是不满足条件的,用dfs可以实现,剩下的就是SPFA直接可以解决了 一开始直接写了个无脑SPF...原创 2019-08-12 00:08:04 · 148 阅读 · 1 评论 -
POJ 3660 POJ 2240 通过floyd传递关系
POJ 3660 Cow Contest 通过floyd传递关系 题目大意:一共有N头牛,给出M个信息A,B 表示A比B强 问最后可以确定排名的牛的数量是多少 瞎分析:放在最短路里,而且数据N<=100 我直接写了floyd 求出最短路,我以为是要求任意两点间最短路的最大值(脑子不太正常),但是后来被这组数据给卡了,然后一个小时都在发呆…… 5 4 1 2 4 2 2 3 2 5 正解:如...原创 2019-08-11 15:40:28 · 136 阅读 · 1 评论 -
Heavy Transportation POJ1797
Heavy Transportation POJ1797 题目大意:和POJ2253 frogger正好相反,给出M条边让求出1-N每一条路径上的最短边权的最大值 可以参考POJ2253 几乎相同的算法 ,也是把d数组不断修改得到点,dijkstra和SPFA都可以解,可能SPFA解决这类问题稍微好一点,毕竟可以解决负权值边的问题 #include<cstdio> #include&l...原创 2019-08-02 14:38:32 · 89 阅读 · 0 评论 -
Frogger详细题解 POJ2253
Frogger题解 POJ2253 题目大意:一共有N块石头,坐标为(xi,yi),小青蛙在1号位置,终点在2号位置,一共有M条边,小青蛙可能会有一条或很多条路径到达终点,找出这些路径中最大边权的最小值 分析:我们求解最短路时常用一个d[x]数组记录下截止到当前位置x的最短路径,那么最后d[n]就是我们的总的最短路径。 这题也是一样,我们用d[x]记录下截止到当前位置x的最大边权的最小值, 即M...原创 2019-08-02 13:49:17 · 259 阅读 · 0 评论 -
差分约束(转最短路问题3)POJ1201
差分约束 POJ 1201 题目大意:给出N组 数据Li,Ri,Xi,意思是在区间[Li,Ri]上最少要选出Xi个数,求总共需要找出最少的数字的总数量 分析:令前i个数中需要挑出d(i)个数字,那么显然d(0)=0; 根据题目翻译成式子就是:d(Ri)-d(Li-1)>=Xi 即d(Li-1)-d(Ri)<=-Xi; 又隐藏了一个条件就是:1>=d(i+1)-d(i)>=0...原创 2019-08-01 19:01:30 · 133 阅读 · 0 评论 -
差分约束(转最短路问题2)POJ3169
差分约束 POJ 3169 差分约束基础例题 题目大意:一共N个牛,给出M1组数据ABC,表示B比A的距离不能超过C,再给出M2组数据A1B1C1,表示B比A的距离不能小于C,是否存在1—N的最大距离。 和上题一样,我们先列出题目给出信息转化成式子: d[B]-d[A]<=C; d[B1]-d[A1]>=C1,即d[A1]-d[B1]<=-C1 那么我们就可以构建出一张有向图,A...原创 2019-08-01 14:37:25 · 94 阅读 · 0 评论 -
差分约束(转最短路问题)POJ3159
差分约束 POJ 3159 差分约束问题的最基础例题 题目大意:N个人,M个信息,每个信息A,B,C表示B的糖果最多比A多C个,求第N个人最多比第一个人多多少个糖果。 分析:最短路模型松弛后的路径 d[v]<=d[u]+w ,即d[v]-d[u]<=w,w表示从u到v的权值,而上述的题意可转化为B-A<=C,即C是从A到B的边。那么原题目就是给你M个边,让你去得到1—N最短路径...原创 2019-08-01 14:05:05 · 151 阅读 · 0 评论 -
SPFA优化Bellmanford算法
SPFA POJ 2387最短路径例题 算法介绍(摘自网络):算法大致流程是用一个队列来进行维护。 初始时将源加入队列。 每次从队列中取出一个元素,并对所有与他相邻的点进行松弛,若某个相邻的点松弛成功,则将其入队。 直到队列为空时算法结束。这个算法,简单的说就是队列优化的bellman-ford,利用了每个点不会更新次数太多的特点发明的此算法 时间复杂度:O(k*E)不定,卡SPFA的问题以后再说...原创 2019-08-01 11:34:09 · 153 阅读 · 0 评论 -
次短路
次短路 基础例题:https://vjudge.net/problem/POJ-3255 之前已经说过dijkstra算法是依次确定距离操作点最近的顶点,依据这个算出来的当然是最短路径,那么次短路径肯定不能是这条路径,所以至少有一条边不是最短路线上的 dijkstra提供了一个很巧妙的算法,本来只用一个d数组记录最短路径,现在改用两个数组,一个记录最短路,另一个记录次短路,然后接下来做法大致相同,...原创 2019-07-31 15:27:06 · 126 阅读 · 0 评论 -
记忆化搜索理解和最短路结合
A Walk Through the Forest HDU 1142 题目大意:有N个位置,办公室在1位置,家在2位置,给出M条双向边,现在需要从1到2,但是从A到B有一个条件就是,存在一条B到家的路径长度小于任意一条A到家的路径长度(即d[b]<d[a])d表示的是x到家的最短路径 第一次接触记忆化搜索这个东西,还是先感受一下大概的意思 1.斐波那契 非记忆化 ll F(ll x) { ...原创 2019-08-03 20:04:11 · 203 阅读 · 2 评论 -
Minimum Transport Cost HDU1385
Minimum Transport Cost HDU1385 题目大意:给出N个点,并给出从x到y之间的消费,但从x到y又会消费w【y】,问从1到N的最小花费,如果花费相同就要按照字典序最小来输出。 我一开始上来没看清楚题目,直接写了一个dijkstra加优先队列维护的,我以为把d[v]>d[u]+cost改成d[v]>d[u]+cost+w[v]就可以了,我样例过了还很开心,但是我后...原创 2019-08-03 18:27:44 · 127 阅读 · 0 评论 -
dijkstra算法
dijkstra算法 用于计算没有负权值边的单源最短路径的算法 给出一个N个点,M条边的城市,让你求从A(假设是x号城市)到B(假设是y号城市)的最短路径是多少。 核心我认为和BFS多多少少有点相似……铲屎也是一个道理,越铲越深,不断更新最短路径就是基于前一个的点的 需要注意以下几点: 1.城市编号从1—n还是0—n-1需要注意 2.如果两个城市之间有多条边的话,还要进行一个大小判断的操作选出最短...原创 2019-07-30 20:22:33 · 279 阅读 · 0 评论