最短路Djikstra算法板子
用于求解有向带非负权图每个点到源点的最短路径问题
时间复杂度O(mlogm)
int n,m,s;
vector<pii>e[maxn];//pii:{去往的点,权值}
int d[maxn],vis[maxn];
priority_queue<pii>q;//pii:{-与源点距离,点}
void dijkstra(int s){
rep(i,1,n)d[i]=inf;
d[s]=0;q.push(pii{0,s});
while(!q.empty()){
pii t=q.top();
q.pop();
int u=t.se;
if(vis[u])continue;
vis[u]=1;
for(auto y:e[u]){
int v=y.fi;int w=y.se;
if(d[v]>d[u]+w){
d[v]=d[u]+w;
q.push(pii{-d[v],v});
}
}
}
}

浙公网安备 33010602011771号