Dijkstra 求助,大紫大红
查看原帖
Dijkstra 求助,大紫大红
1013950
__youzimo2014__楼主2024/7/24 16:59

record
提交记录都放这里了,为什么还要贴代码

#include <bits/stdc++.h>
#define MAXN 100005
#define _INT_MAX_ 1000000000
using namespace std;
struct nod {
	int u, len;
	nod(int u_, int len_) {
		u = u_;
		len = len_;
	}
};

bool operator<(nod x, nod y) {
	if (x.len != y.len) return x.len < y.len;
	return x.u < y.u;
}
int dis[MAXN]; // dijkstra
bool vis[MAXN];
vector<int> G[MAXN], val[MAXN];
int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int n, m, s;
	cin >> n >> m >> s;
	for (int i = 1; i <= m; i++) {
		int u, v, w;
		cin >> u >> v >> w;
		G[u].push_back(v);
		val[u].push_back(w);
	}
	for (int i = 1; i <= n; i++) {
		dis[i] = _INT_MAX_;
	}
	priority_queue<nod> q; // 堆优化
	q.push(nod(s, 0));
	dis[s] = 0;
	while(!q.empty()){
		auto [x, len] = q.top(); q.pop();
		vis[x] = true;
		for (int i = 0; i < G[x].size(); i++) {
			int v = G[x][i];
			if (!vis[v]) {
				dis[v] = min(dis[v], dis[x] + val[x][i]);
				q.push(nod(v, dis[v]));
			}
		}
	}
	for (int i = 1; i <= n; i++) {
		cout << dis[i] << ' ';
	}
	cout << endl;
	return 0;
}
2024/7/24 16:59
加载中...