今天偶然发现我和机房大佬的dijkstra写的不一样
我的:
void dijkstra(int s){
dis[s]=0;
q.push({s,dis[s]});
while(!q.empty()){
Node now=q.top();
q.pop();
int u=now.u,ds=now.dis;
if(dis[u]!=ds) continue;
for(auto [v,w]:e[u]){
if(dis[v]>dis[u]+w){
dis[v]=dis[u]+w;
q.push({v,dis[v]});
}
}
}
}
机房大佬的:
void dijkstra(int s){
dis[s]=0;
q.push({s,dis[s]});
while(!q.empty()){
Node now=q.top();
q.pop();
int u=now.u,ds=now.dis;
if(vis[u]) continue;
vis[u]=1;
for(auto [v,w]:e[u]){
if(dis[v]>dis[u]+w){
dis[v]=dis[u]+w;
if(!vis[v]){
q.push({v,dis[v]});
}
}
}
}
}
想问问这两种复杂度都正确吗?为啥在模板题这两种写法差了800多ms?(测试时开启O2,除了dijkstra外其他部分均相同)