测试点#4#5#7 WA
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
int n, m, s, u, v, a, d[10001];
struct Edge
{
int v, w;
Edge(int a, int b)
{
v = a; w = b;
}
};
vector<Edge>Node[10001];
bool f[10001];
int main()
{
memset(d, 0x3f, sizeof(d));
ios::sync_with_stdio(0);
cin >> n >> m >> s ;
f[s] = 1;
for (int i = 1; i <= m; i++)
{
cin >> u >> v >> a;
Edge t(v, a);
Node[u].push_back(t);
}
for (auto i : Node[s])
d[i.v] = i.w;
d[s] = 0;
for (int i = 1; i <= n; i++)
{
int Min = 0x7fffffff, k = 0;
for (int j = 1; j <= n; j++)
if (d[j] < Min && !f[j])
{
Min = d[j];
k = j;
}
if (k == 0)
break;
f[k] = 1;
for (auto j : Node[k])
if (d[j.v] > d[k] + j.w)
d[j.v] = d[k] + j.w;
}
for (int i = 1; i <= n; i++)
cout << ((d[i] == 0x3f3f3f3f) ? 0x7fffffff : d[i]) << ' ';
return 0;
}