今天讲的算法出自这个人:
好帅呀!
dijkstra算法用于单源最短路,就是在一张图中从一个点(一般是1)到所有点的最短路,n代表点数,m代表边数,朴素的dijkstra算法复杂度是 O O O(n2),堆优化后可以达到 O O O((n+m)×logn),最重要的是它不会像SPFA一样被卡掉,所以皮实好用呀!(关于SPFA,他死了)
dijkstra算法的主要思想是贪心,先把1加入点集,然后在所有与点集的连边中找到最短的,更新dis数组(表示当前最短的距离),然后把那条边连向的点加入点集,再进行过程,直到所有的点都在点集中时dis数组就是最后的答案。
emmmm,之前说过了,这么算的话算法的复杂度是n方的,我们还可以堆优化,在之前的过程中,我们需要在所有连边中找到最短的,这个可以用堆优化来完成。
所以奉上代码:
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+10,MAXM=2e5+10;
int n,m,s;
int x,y,c