(1)多源最短路径 Floyd-Warshall 算法核心语句 for(k = 1;k <= n;k++) for(i= 1;i <= n;i++) for(j= 1;j <= n;j++) if(e[i][j]>e[i][k]+e[j][k]) ` e[i][j] = e[i][k]+e[j][k ...
分类:
编程语言 时间:
2020-04-20 20:07:56
阅读次数:
82
原理及python实现 graph:保存图,类似邻接表 costs:保存从起点到某点的最小花费 parents:保存节点的父节点 processed:用于保存已经处理过的点 graph={} graph["start"]={} graph["start"]["a"]=6 graph["start"] ...
分类:
编程语言 时间:
2020-04-19 12:49:46
阅读次数:
62
T1: 先跑个Floyd,然后求一下建在点上的答案 容易发现已经把答案限制的比较紧了 然后统计边的答案,加一个最优性剪枝 然后考虑二分解决就行了 如果不加剪枝,复杂度为$O(n^3+n^3logC)$ 如果加上的话,因为第一次就把答案限制的很紧,所以复杂度大概为$O(n^3+n^2logC)$ T2 ...
分类:
其他好文 时间:
2020-04-19 11:18:18
阅读次数:
72
1 #include <iostream> 2 #define infinity 65535 3 using namespace std; 4 int cnt[1000];//S到某点最短路径的数目 5 int low[1000];//S到某点最短路径长度 6 int high[1000] = { ...
分类:
其他好文 时间:
2020-04-18 11:40:54
阅读次数:
155
Floyd算法 使用条件 可以求出多源最短路,可以处理负权边的情况,但是不能出现负环。 时间复杂度 O(n3) 讲解 Floyed算法使用的是动态规划的方法。 我们首先观察上图。 我们来想一想,根据我们以往的经验,如果要让任意两点(例如从顶点a点到顶点b)之间的路程变短,只能引入第三个点(顶点k), ...
分类:
编程语言 时间:
2020-04-18 09:17:29
阅读次数:
115
#include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N = 500; int n, m, g[N][N], d[N]; bool st[N]; int dijkstra( ...
分类:
其他好文 时间:
2020-04-14 22:36:28
阅读次数:
49
OAO dijkstra算法在复杂度方面是十分优秀的,但是其最大弊端就是无法处理带负权的图 (因为是基于已经被更新过的距离源点的边必然已经达到了最短路的这个事实 来采取贪心策略来求得最短路 而有负权路存在时,这个基础不在成立。) 这个时候就要请出Bellman-Ford算法了 (正确性证明:http ...
分类:
编程语言 时间:
2020-04-14 20:30:25
阅读次数:
61
最近发现struct板子真的好用。 1 #include<bits/stdc++.h> 2 #define ll long long 3 #define scan(i) scanf("%d",&i) 4 #define scand(i) scanf("%lf",&i) 5 #define scanl ...
分类:
编程语言 时间:
2020-04-13 18:19:39
阅读次数:
107
本题考点: 多标尺的Dijkstra 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时 ...
分类:
其他好文 时间:
2020-04-10 10:34:13
阅读次数:
140
"CSDN同步" "原题链接" 前置知识: "$\text{dijkstra}$ 模板" 简要题意: 求任意两点的最短路。图中可能有 负环,负权,重边,自环 等现象。 显然我们先建图。 算法一 对于 $20\%$ 的数据,$1\leq n \leq 100$,不存在负环(可用于验证 $\text{F ...
分类:
其他好文 时间:
2020-04-08 18:57:23
阅读次数:
82