社区讨论

dij求教20分

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

讨论操作

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

当前回复
9 条
当前快照
1 份
快照标识符
@mi7xqxrt
此快照首次捕获于
2025/11/21 05:20
4 个月前
此快照最后确认于
2025/11/21 05:20
4 个月前
查看原帖
CPP
#include <iostream>
#include <cstdio>
#include <queue>
#include <vector>
#define maxn 100001
#define INF 100000001
using namespace std;
int n,m,s;
vector <int > g[maxn],w[maxn];
bool vis[maxn];
int dis[maxn];
void dijkstra(){
	priority_queue<int,vector<int>,greater<int> > q;
	for (int i = 1;i <= n;++i)dis[i] = INF;
	dis[s] = 0;q.push(s);
	while (!q.empty()){
		int u = q.top();
		int cnt = g[u].size();
		q.pop();
		if (vis[u] == 1)continue;
		vis[u] = 1;
		for (int i = 0;i < cnt; ++i){
			int v = g[u][i],val = w[u][i];
			if (dis[v] > dis[u] + val){
				dis[v] = dis[u] + val;
				if (!vis[v]){
					q.push(v);
				}
			}
		}
	}
}
signed main(){
	ios :: sync_with_stdio(false);
	cin >> n >> m >> s;
	for (int i = 1;i <= m; ++i){
		int u,v,c;
		cin >> u >> v >> c;
		g[u].push_back(v);w[u].push_back(c); 
	}
	dijkstra();
	for (int i = 1;i <= n; ++i){
		cout <<dis[i]<<' ';
	}
}

回复

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

正在加载回复...