struct ac{
int v,dis;
ac(){}
ac(int _v,int _dis):v(_v),dis(_dis){}
bool operator < (const ac& x)const{
if(dis==x.dis)
return v>x.v;
return dis>x.dis;
}
};
vector<ac>Adj[maxn];
void Dijkstra(int v0){
memset(d,INF,sizeof(d));
d[v0] = 0;
priority_queue<ac>q;
q.push(ac(v0,d[v0]));
while(!q.empty()){
ac t = q.top();q.pop();
for(int i=0;i<Adj[t.v].size();i++){
ac tt = Adj[t.v][i];
if(d[tt.v]>t.dis+tt.dis){
d[tt.v] = t.dis + tt.dis;
q.push(ac(tt.v,d[tt.v]));
}
}
}
}
Dijkstra 优先队列优化
最新推荐文章于 2022-06-25 11:41:51 发布