#include<iostream>
#include<cstdio>
#include<queue>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=30000+5;
struct Edge{
int from,to,weight;
Edge(int from,int to,int weight):from(from),to(to),weight(weight){}
};
struct HeapNode{ //prority_queue 中的优先级
int u,dist; //dist: u点到起点的最短路 ,u: 有向边的终点
HeapNode(int u,int d):u(u),dist(d){}
bool operator < (const HeapNode& h) const {
return dist>h.dist;
}
};
struct Dijkstra{ //打包在Dijkstra中
int n,m;
vector<Edge> edges;
vector<int> G[maxn];
bool done[maxn];
int dist[maxn];
int p[maxn];
Dijkstra(int n):n(n){
for(int i=0;i<n;i++) G[i].clear();
edges.clear();
}
void AddEdge(int from,int to,int weight){
edges.push_back(Edge(from,to,weight));
m=edges.size();
G[from].push_back(m-1); //保存from出发的边
}
void dijkstra(int s)
{
priority_queue<HeapNode> Q;
memset(dist,0x7f,sizeof(dis
Dijkstra+堆优化 模板
最新推荐文章于 2025-06-10 22:45:31 发布