社区讨论

y总板子(dijkstra),3个点tle,48分求调

P4779【模板】单源最短路径(标准版)参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@m6nvfkpw
此快照首次捕获于
2025/02/03 01:03
去年
此快照最后确认于
2025/02/03 15:31
去年
查看原帖
CPP
#include<bits/stdc++.h>

using namespace std;

const int N = 100010, M = 200010;
int n, m, s;
int dist[N], st[N];
int h[N], idx, e[M], ne[M], w[M];

using PII = pair<int, int>;

void add(int a, int x, int b){
	e[idx] = x, w[idx] = b, ne[idx] = h[a], h[a] = idx ++;
}

void dijkstra(){
	memset(dist, 0x3f, sizeof dist);
	dist[s] = 0;
	
	priority_queue<PII, vector<PII>, greater<PII>> heap;
	heap.push({0, s});
	
	while(!heap.empty()){
		auto t = heap.top();
		heap.pop();
		
		int ver = t.second, distance = t.first;
		if(st[ver]) continue;
		
		for(int i = h[ver]; i != -1; i = ne[i]){
			int j = e[i];
			if(dist[j] > w[i] + distance)
			{
				dist[j] = w[i] + distance;
				heap.push({dist[j], j});
			}
		}
	}
}

int main(){
	memset(h, -1, sizeof h);
	cin >> n >> m >> s;
	for(int i = 1; i <= m; i ++ ){
		int _, __, ___;
		cin >> _ >> __ >> ___;
		add(_, __, ___);
	}
	
	dijkstra();
	
	for(int i = 1; i <= n; i ++ )
		cout << dist[i] << " ";
}

回复

2 条回复,欢迎继续交流。

正在加载回复...