32分,求助
查看原帖
32分,求助
173864
NaN_HQJ2007_NaN楼主2021/6/27 14:20
#include <bits/stdc++.h>
using namespace std;

const int N = 2e5 + 5, inf = INT_MAX >> 1;
int n, m, s, dis[N], vis[N];
vector<pair<int, int> > g[N];
priority_queue<pair<int, int> > q;
void dijkstra() {
	q.push(make_pair(s, 0));
	while (!q.empty()) {
		int u = q.top().first;
		q.pop();
		if (vis[u] == 1) continue;
		vis[u] = 1;
		for (int i = 0; i < g[u].size(); ++i) {
			int v = g[u][i].first, w = g[u][i].second;
			if (dis[v] > dis[u] + w) {
				dis[v] = dis[u] + w;
				q.push(make_pair(v, dis[v]));
			}
		}
	}
}

int main() {
	cin >> n >> m >> s;
	for (int i = 1; i <= m; ++i) {
		int u, v, w;
		cin >> u >> v >> w;
		g[u].push_back(make_pair(v, w));
	}
	for (int i = 1; i <= n; ++i) dis[i] = inf;
	dis[s] = 0;
	dijkstra();
	for (int i = 1; i <= n; ++i) cout << dis[i] << " ";
	cout << endl;
	return 0;
}
2021/6/27 14:20
加载中...