关于dijkstra的疑问
  • 板块学术版
  • 楼主Cap1taL
  • 当前回复17
  • 已保存回复17
  • 发布时间2023/3/9 17:07
  • 上次更新2023/10/23 22:06:51
查看原帖
关于dijkstra的疑问
467107
Cap1taL楼主2023/3/9 17:07

今天偶然发现我和机房大佬的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外其他部分均相同)

2023/3/9 17:07
加载中...