比赛 |
板子大赛 |
评测结果 |
AAAAAA |
题目名称 |
单源最短路 |
最终得分 |
100 |
用户昵称 |
zhm |
运行时间 |
0.018 s |
代码语言 |
C++ |
内存使用 |
3.04 MiB |
提交时间 |
2025-01-22 11:11:57 |
显示代码纯文本
#include <cstdio>
#include <queue>
using namespace std;
const int N = 100, M = 500;
int n, m, s;
int cnt, h[N+5], nxt[2*M+5], to[2*M+5], w[2*M+5];
int dis[N+5];
void add(int u, int v, int val)
{
cnt++;
to[cnt] = v;
w[cnt] = val;
nxt[cnt] = h[u];
h[u] = cnt;
}
bool vis[N+5];
priority_queue<pair<int, int> > q;
int main(void)
{
freopen("path.in", "r", stdin);
freopen("path.out", "w", stdout);
scanf("%d %d %d", &n, &m, &s);
for (int i = 1; i <= m; i++) {
int x, y, z;
scanf("%d %d %d", &x, &y, &z);
add(x, y, z);
add(y, x, z);
}
for (int i = 1; i <= n; i++)
dis[i] = 0x3fffffff;
dis[s] = 0;
q.push(make_pair(-0, s));
while (!q.empty()) {
int u = q.top().second;
q.pop();
if (vis[u]) continue;
vis[u] = 1;
for (int i = h[u]; i; i = nxt[i]) {
int v = to[i];
if (dis[v] > dis[u] + w[i]) {
dis[v] = dis[u] + w[i];
q.push(make_pair(-dis[v], v));
}
}
}
for (int i = 1; i <= n; i++)
printf("%d ", dis[i]);
putchar('\n');
fclose(stdin);
fclose(stdout);
return 0;
}