社区讨论

RE 求调

P4779【模板】单源最短路径(标准版)参与者 3已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@lo321iz0
此快照首次捕获于
2023/10/23 23:30
2 年前
此快照最后确认于
2023/10/23 23:30
2 年前
查看原帖
(很可能是某些sb的错误)
CPP
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
const int maxm=2e5+10;
const int INF=1e9+7;
int n,m,s,tot,h[maxn],dis[maxn],vis[maxn];
struct Edge{
	int v,w,next;
}e[maxm];
void addedge(int u,int v,int w) {
	e[++tot]={v,w,h[u]};
	h[u]=tot;
}
struct Node{
	int ind,dis;
	bool operator < (const Node &x)const {
		return dis<x.dis;
	}
};
priority_queue<Node> q;
void Dijkstra(int st) {
	for(int i=1;i<=n;i++) dis[i]=INF;
	dis[st]=0;
	q.push({st,0});
	while(!q.empty()) {
		Node cur=q.top(); q.pop();
		if(vis[cur.ind]) continue;
		vis[cur.ind]=1;
		for(int i=h[cur.ind];i;i=e[i].next) {
			if (dis[e[i].v] > dis[cur.ind] + e[i].w) {
				dis[e[i].v] = dis[cur.ind] + e[i].w;
				if (vis[e[i].v] == 0)
					q.push({dis[e[i].v], e[i].v});
			}
		}
	}
}
int main() {
	cin>>n>>m>>s;
	for(int i=1;i<=m;i++) {
		int u,v,w; cin>>u>>v>>w;
		addedge(u,v,w), addedge(v,u,w); 
	}
	Dijkstra(s);
	for(int i=1;i<=n;i++) {
		cout<<dis[i]<<" ";
	}
	cout<<endl;
	return 0;
} 

回复

6 条回复,欢迎继续交流。

正在加载回复...