谢谢点进来的大佬
#include <queue>
#include <cstdio>
#include <vector>
#include <iostream>
using namespace std;
struct edge
{
int v, w;
};
const int N = 100000 + 5, INF = int((long long)(1 << 31) - 1);
vector<edge> e[N];
int dis[N];
bool vis[N];
priority_queue<int> pq;
int main()
{
int n, m, s;
scanf("%d %d %d", &n, &m, &s);
for (int i=1; i<=m; ++i)
{
int u, v, w;
scanf("%d %d %d", &u, &v, &w);
e[u].push_back({v, w});
}
for (int i=1; i<=n; ++i)
{
dis[i] = INF;
}
dis[s] = 0;
pq.push(s);
while (!pq.empty()) {
int x = pq.top();
pq.pop();
if (vis[x]) continue;
vis[x] = true;
for (int i = 0, len = e[x].size(); i < len; ++i)
{
if (dis[e[x][i].v] > dis[x] + e[x][i].w)
{
dis[e[x][i].v] = dis[x] + e[x][i].w;
pq.push(e[x][i].v);
}
}
}
for (int i=1; i<=n; ++i)
printf("%d ", dis[i]);
putchar('\n');
return 0;
}