Dijkstra堆优化求调
  • 板块灌水区
  • 楼主Jimmy_Cao
  • 当前回复17
  • 已保存回复17
  • 发布时间2024/9/21 22:35
  • 上次更新2024/9/22 07:37:38
查看原帖
Dijkstra堆优化求调
1351065
Jimmy_Cao楼主2024/9/21 22:35

题目传送门

#include <bits/stdc++.h>
#define INF 0x3f3f3f
using namespace std;
struct Edge {
	int to, value, next;
	Edge(int _to = 0, int _value = INF, int _next = 0): to(_to), value(_value), next(_next) {}
} e[200005];
struct Point {
	int num, dist;
	Point(int _num = 0, int _dist = 0): num(_num), dist(_dist) {}
};
bool operator < (const Point &a, const Point &b) {
	return a.dist > b.dist;
}
priority_queue<Point> q;
int n, m, s;
int dis[100005], vis[100005], head[100005], cnt;
void add(int u, int v, int w) {
	e[++cnt].to = v;
	e[cnt].value = w;
	e[cnt].next = head[u];
	head[u] = cnt;
}
void Dijkstra(int start) {
	Point p;
	for (int i = 1; i <= n; i++) dis[i] = INF;
	dis[start] = 0;
	p.num = start;
	p.dist = 0;
	q.push(p);
	while (!q.empty()) {
		int cur = q.top().num;
		q.pop();
		if (vis[cur]) continue;
		vis[cur] = 1;
		for (int i = head[cur]; i != -1; i = e[i].next) {
			int to = e[i].to;
			if (dis[to] > e[i].value + dis[cur] && !vis[to]) {
				dis[to] = e[i].value + dis[cur];
				p.num = to;
				p.dist = dis[to];
				q.push(p);
			}
		} 
	}
} 
int main() {
	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;
}

死循环了。。。

2024/9/21 22:35
加载中...