#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
int mod = 9973;
const int INF = 2147483647;
const int maxn = 1e4 + 10;
inline void read(int &x)
{
x = 0;
char c = getchar();
int flag = 1;
while (c < '0' || c > '9')
flag = (c == '-' ? -1 : 1), c = getchar();
while (c >= '0' && c <= '9')
x = x * 10 + c - '0', c = getchar();
x = x * flag;
}
struct node
{
ll index, val;
node(int index, int val) : index(index), val(val) {}
};
int n, m, s;
ll dis[maxn];
int vis[maxn];
vector<vector<node>> Map;
void Dij()
{
for (int i = 0; i <= n; i++)
dis[i] = INF;
for (int i = 0; i < Map[s].size(); i++)
dis[Map[s][i].index] = Map[s][i].val;
dis[s] = 0;
vis[s] = 1;
for (int k = 0; k < n - 1; k++)
{
int index, val = INF;
for (int i = 1; i <= n; i++)
if (!vis[i] && dis[i] < val)
val = dis[i], index = i;
vis[index] = 1;
for (int i = 0; i < Map[index].size(); i++)
{
if (!vis[Map[index][i].index])
dis[Map[index][i].index] = min(dis[Map[index][i].index], val + Map[index][i].val);
}
}
}
int main()
{
read(n), read(m), read(s);
Map = vector<vector<node>>(n + 1);
for (int i = 0, a, b, c; i < m; i++)
{
read(a), read(b), read(c);
Map[a].push_back(node(b, c));
}
Dij();
for (int i = 1; i <= n; i++)
cout << dis[i] << ' ';
return 0;
}
真不知道哪错了,希望大佬能指点一下,谢谢