一、算法分析
从题意上来看,就是求单源最短路径,标准版考虑用dijkstra来做,要用堆优化,也就是优先队列优化。
二、代码及注释
代码是紫书上的dijkstra模板,自己写了一些注释,配合自己画图的话还是很好理解的。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
const int maxn=100005;
const long long inf=2147483647;
struct edge{
int from,to,dist; //边的起点、终点和权值
edge(int u,int v,int d):from(u),to(v),dist(d){
}
};
struct heapnode{
int d,u; //到原点的距离和点的编号
bool operator < (const heapnode& rhs) const{
return d>rhs.d;