20pts求调
查看原帖
20pts求调
1528563
lyt_tcsn楼主2025/1/27 13:01

rt

#include <bits/stdc++.h>
#define pii pair<int, int> 
using namespace std;
const int N = 100005;
int n, m, s, vis[N], dis[N];
vector<pii> g[N];
void add(int u, int v, int cost) {
	g[u].push_back(make_pair(v, cost));
}
void dijkstra(int st) {
	fill(dis + 1, dis + 1 + n, INT_MAX);
	priority_queue<pii, vector<pii>,
		greater<pii> > q;
	q.push(make_pair(st, 0));
	dis[st] = 0;
	while (!q.empty()) {
		pii t = q.top(); q.pop();
		int u = t.first;
		if (vis[u]) continue;
		vis[u] = true;
		for (pii& e : g[u]) {
			int v = e.first;
			int w = e.second;
			if (!vis[v] && dis[v] > dis[u] + w) {
				dis[v] = dis[u] + w;
				q.push(make_pair(v, dis[v]));
			}
		}
	}
}
int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> n >> m >> s;
	for (int i = 1; i <= m; i++) {
		int u, v, w;
		cin >> u >> v >> w;
		add(u, v, w);
	}
	dijkstra(s);
	for (int i = 1; i <= n; i++) {
		cout << dis[i] << " ";
	}
	return 0;
}
2025/1/27 13:01
加载中...