52分 求调 悬关
查看原帖
52分 求调 悬关
679659
wzhmyt楼主2024/10/15 21:26
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
struct edge {
	int v, w;
};
struct node {
	int dis, u;
	bool operator > (const node& a) const {
		return dis > a.dis;
	}
};
vector<edge> e[maxn];
int dis[maxn], vis[maxn];
priority_queue<node, vector<node>, greater<node> > q;
int n, m, s;
void dijkstra(int n, int s) {
	memset(dis, 0x3f, sizeof(dis));
	dis[s] = 0;
	q.push({0, s});
	while(!q.empty()) {
		int u = q.top().u;
		q.pop();
		if (vis[u]) continue;
		vis[u] = 1;
		for (auto ed : e[u]) {
			int v = ed.v, w = ed.w;
			if (dis[v] > dis[u] + w) {
				dis[v] = dis[u] + w;
				q.push({dis[v], v});
			}
    	}
	}
}
int main() {
	cin >> n >> m >> s;
	for (int i = 1; i <= m; i++) {
		int u, v, w;
		cin >> u >> v >> w;
		e[u].push_back({v, w});
		e[v].push_back({u, w});
	}
	memset(vis, 0, sizeof(vis));
	dijkstra(n, s);
	for (int i = 1; i <= n; i++) cout << dis[i] << " ";
	return 0;
}
2024/10/15 21:26
加载中...