社区讨论
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 条回复,欢迎继续交流。
正在加载回复...