最短路
文章平均质量分 92
最短路
你别教我打游戏
直面困难,重视过程,追求结果,淡忘过去。
展开
-
最短路+Dijkstra算法(小根堆优化)+Bellman—Ford算法(优先队列优化的SPFA算法)+最短路的路径打印+Floyd算法+传递闭包
SSSP问题给定一个带权有向图G=(V,E),其中每条边的权是一个实数。另外,还给定V中的一个顶点,称为源。要计算从源到其他所有各顶点的最短路径长度。这里的长度就是指路上各边权之和。这个问题通常称为单源最短路径问题。Dijkstra算法时间复杂度 O(m∗log(n)){{O(m*log(n))}}O(m∗log(n))#include<stdio.h>#include<...原创 2020-02-14 00:04:24 · 342 阅读 · 0 评论 -
经过k个中转点的最短路+DFS(全排列的枚举)
Description:给定一个n个点,m条边的有向图,有k个中转点,要求从规定的起点按任意顺序经过所有标记点到达规定的终点,问最短的距离是多少。以3个中转点为例,即为k1,k2,k3。一共有6种可能:① s -> k1 -> k2 -> k3 -> e② s -> k1 -> k3 -> k2 -> e…………⑥ s -> k3...原创 2020-03-10 19:58:52 · 536 阅读 · 0 评论 -
(嵌套矩形)DAG上的动态规划(1)最长路及其字典序+dfs版(填表法)+递推版(刷表法)
Description:有n个矩形,每个矩形可以用a,b来描述,表示长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于旋转X90度)。例如(1,5)可以嵌套在(6,2)内,但不能嵌套在(3,4)中。你的任务是选出尽可能多的矩形排成一行,使得除最后一个外,每一个矩形都可以嵌套在下一个矩形内。Input:11012 1...原创 2020-03-01 21:56:32 · 345 阅读 · 0 评论 -
最短路计数的变式+记忆化搜索———Walk Through the Forest UVA - 1091
Walk Through the Forest 要点:He considers taking a path from A to B to be progress if there exists a route from B to his home that is shorter than any possible route from A.也就是 dis[B]<dis[A]{{dis[...原创 2020-02-20 19:15:53 · 124 阅读 · 0 评论 -
UVA 11374 两次最短路+暴力枚举+路径输出+输出要细致
Airport Express核心思路:因为特殊路线最多只能走一次。因此,对”经济路线“建图,如果有一条"商业路线"(u,v,w)加入到路径的话,那么,从s -->u ,v–>e的路径应该分别是最小值。所以,分别维护两个数组 d[i],g[j],意义分别为从s -->i, j–>e的最短路径。运行两次Dijkstra即可。然后枚举每一条”商业路线“,更新即可。...原创 2020-02-20 01:53:11 · 183 阅读 · 0 评论 -
最短路不唯一,枚举与计数
文章目录最短路唯一的路径记录最短路不唯一枚举所有的最短路计数最短路唯一的路径记录核心就是维护一个 f[]数组,用来记录f[v]=u,也就是v的上一个节点是u。最后既可以递归打印,也可以存进vector,最后循环输出。 /* for(int y=1;y<=n;y++){ d[y]=min(d[y],d[x]+a[x][y]); //必须是a[x...原创 2020-02-19 23:17:33 · 404 阅读 · 0 评论 -
变换开关次数——变形Floyd算法 POJ 1847
变换开关次数本题当然也可以不用Floyd算法(Dijkstra算法),但是N很小,用Floyd算法编码方便。注意点:初始化,无需变动开关的 d[i][j]=0,需要变动的d[i][j]=1 ,不连通的d[i][j]=INF。#include<stdio.h>#include<iostream>#include<cmath>#include<m...原创 2020-02-18 13:51:04 · 160 阅读 · 0 评论 -
欧氏距离的边权、建图复杂 POJ 1847
建图复杂要小心稠密图,使用时间复杂度为O(n^2)的Dijkstra算法。坑点:建图复杂要小心。都是地铁站,但是只能一站一站的前行,不能因为都是地铁站,就可以从1号直接到3号。#include<stdio.h>#include<iostream>#include<cmath>#include<math.h>#include<st...原创 2020-02-18 13:41:39 · 165 阅读 · 0 评论 -
最短路 思维转换 POJ 3159需要深刻理解题意的模板题
CandiesDescription:在幼儿园的时候,Flymouse是班上的班长。有时班主任会给班上的孩子们带来一大袋糖果,让他们分发。所有的孩子都非常喜欢糖果,经常比较他们和别人买的糖果的数量。一个孩子A可以有这样的想法,尽管可能是另一个孩子B在某些方面比他好,因此他有理由比他应得更多的糖果,但无论他实际得到多少糖果,他都不应该得到比B少的一定数量的糖果,否则他会感到不满意。 Flymou...原创 2020-02-17 19:16:30 · 214 阅读 · 0 评论 -
偏序关系的传递闭包(Floyd算法的变种) POJ3660 能够确定排名的个数
Cow Contest Solution:①Floyd算法传递闭包,确定若干对二元关系。注意是有向图,d[x][y]=1表明 x的值>y的值;d[x][y]=0表明不确定二者关系。②假如某个节点i的排名可以确定,意味着,从1~N,d[i][j]和d[j][i]至少一个为1,否则关系不能确定。#include<stdio.h>#include<iostream&g...原创 2020-02-17 14:42:04 · 294 阅读 · 0 评论 -
POJ1502模板题
传送门主要是输入输出。int x = atoi(char s[]);//可以将字符串转化为整数#include<stdio.h>#include<iostream>#include<cmath>#include<math.h>#include<string>#include<string.h>#inclu...原创 2020-02-17 11:48:58 · 222 阅读 · 0 评论 -
负环、正环的判断 POJ 3259 POJ 1806 POJ 2240
文章目录负环的判定正环的判定负环的判定原理:在SPFA算法中,每个点会多次加队,多次出队,但是在经过最多n次后,m条边都会满足三角形不等式,此时的 dis[]即为所求。换言之,每个点最多入队出队n次。而如果存在负环,就会在此负环上无限迭代下去,最终,这个点的入队次数将超过 n次。用一个cnt[I]记录每个点入队次数,一旦cnt[i]超过n,立刻退出,说明存在负环,当然最短路也不存在。模板...原创 2020-02-17 10:28:46 · 396 阅读 · 0 评论 -
POJ3268 POJ 1511 建反图
多源单汇问题Description:求1~N到目的地X的最短路。Solution:以X为起点,1~N到终点,当然图也要反着建,也就是起点终点互换。(代码巨丑~~)#include<stdio.h>#include<iostream>#include<cmath>#include<math.h>#include<string&...原创 2020-02-17 09:01:38 · 215 阅读 · 0 评论 -
POJ-3662: DP+SPFA求路径上的第 k 大的边权尽可能小的路径
求路径上的第 k 大的边权尽可能小的路径Description:从1到N走一条路径,可以选择k条路径将它的权值更改0,求此时的路径中最大边权尽可能小的路径。状态: d[i][k]代表到达第i的节点的时候,已经使用了k次免费机会的权值。这里的权值定义为出去免费的那些边,出现的最大边权尽可能小的值DP方程d[v][j]=min(d[u][j−1],max(d[u][j],w){{d[v][j...原创 2020-02-15 12:03:55 · 212 阅读 · 0 评论 -
最大边权尽可能小的路径+最小边权尽可能大 变形Dijkstra POJ2253 && 变形 Floyd UVA 10048 && 变形 Dijkstra POJ1797
求路径上的最大边权尽可能小的路径#include<stdio.h>#include<iostream>#include<cmath>#include<math.h>#include<string>#include<string.h>#include<algorithm>#include <qu...原创 2020-02-14 22:11:41 · 407 阅读 · 0 评论