2020-07-06 个人赛1 H:Moortal Cowmbat 题意: 样例: 题解: ①题目文本中已经提示说,i->j直接变化的代价不一定是最小的,所以可以借助中间点,先跑一个Floyd,算出两点之间真正的最小代价备用。 ②设置数组dp[i][j]表示在第i个字母为j时,前i个字母整体的最小代 ...
分类:
其他好文 时间:
2020-07-10 21:20:18
阅读次数:
59
最短路算法(三)Dijkstra算法 PS:因为这两天忙着写GTMD sagment_tree,所以博客可能是sag+图论混搭着来,另外sag的基本知识就懒得整理了…… Part 1:Dijkstra算法基本信息 以下,我们用dis[n]表示1->n的最短路径长度,vis[n]表示n号节点有没有被访 ...
分类:
编程语言 时间:
2020-07-09 12:17:08
阅读次数:
123
目录 二分查找 排序的写法 BFS的写法 DFS的写法 回溯法 树 递归 迭代 前序遍历 中序遍历 后序遍历 构建完全二叉树 并查集 前缀树 图遍历 Dijkstra算法 Floyd-Warshall算法 Bellman-Ford算法 最小生成树 Kruskal算法 Prim算法 拓扑排序 查找子字 ...
分类:
其他好文 时间:
2020-07-07 18:08:11
阅读次数:
74
朴素版prim算法(适用于稠密图) 时间复杂度:O(n^2) 类比Dijkstra算法:Dijkstra算法是更新到起始点的距离,Prim是更新到集合S的距离 S:当前已经在联通块中的所有点的集合 dist[i] = inf for n 次 t<-S外离S最近的点 st[t] = true 利用t更 ...
Floyd算法 时间复杂度是O(n^3) 初始化 初始化: for (int i = 1; i <= n; i ++ ) for (int j = 1; j <= n; j ++ ) if (i == j) mp[i][j] = 0; else mp[i][j] = INF; 核心算法 注意:k,i ...
朴素Dijkstra算法 时间复杂是 O(n^2+m), n 表示点数,m 表示边数 适合稠密图 #include<cstring> #include<iostream> #include<algorithm> #define mm(a,x) memset(a,x,sizeof(a)) #defin ...
分类:
编程语言 时间:
2020-07-04 11:50:16
阅读次数:
88
写在前面:图论题的调试真感人 让我们进入正题 ##最短路是啥 emmm 顾名思义最短路就是求一个点到另外一个点的最小距离 一般来说最短路分为:单源最短路和多源最短路 单源最短路就是求一个源点到另外多个点的最短距离 而多源最短路就是求多个点到其他点的最短距离 算法一般有: floyd(多源 O(\(n ...
分类:
其他好文 时间:
2020-07-03 21:51:41
阅读次数:
83
dijkstra+堆优化: P4779 【模板】单源最 code: #include<bits/stdc++.h> using namespace std; const int N=3e5; int n,m; int s,x,y,w; int head[N]; int dis[N]; bool vi ...
分类:
其他好文 时间:
2020-07-03 12:11:33
阅读次数:
57
邻接矩阵存储图,n<= 100, 使用多源最短路算法Floyd算法(\(O(n^3)\)),求出重要城市之间最短路径。 遍历所有可能的配对,找出最小路径代价。具体的,求出所有重要城市的全排列,让相邻两城市配对,累加路径代价,再更新最小代价。 import java.util.*; public cl ...
分类:
其他好文 时间:
2020-07-01 22:05:20
阅读次数:
69
手机导航是怎么得出两个地点间的最短线路?把地图简化为一个加权图,然后利用这个加权图查找最短路径。 将地点看成节点,把道路看成边,整个地图就可看成一个加权图 迪克斯特朗算法 Floyd算法 A*算法 迪克斯特朗算法 如图所示公交车线路图,从A站到F站,如何知道坐车距离最短,可用迪克斯特朗算法。 迪克斯 ...
分类:
编程语言 时间:
2020-06-30 22:36:07
阅读次数:
94