rt 样例显示4个0
#include<bits/stdc++.h>
using namespace std;
int n, m, s;
int inf = 2147483647;
int h[20050], edgecnt;
long long dis[10050];
bool dict[10050];
struct Edge
{
int to, w, next;
}edge[1000050];
void init()
{
edgecnt = 0;
for (int i = 0; i <= n; i++) h[i] = -1;
for (int i = 1; i <= n; i++) dict[i] = 0;
}
void addegde(int u, int v, int w)
{
edge[++edgecnt].to = v;
edge[edgecnt].w = min(edge[edgecnt].w, w);
edge[edgecnt].next = h[u];
h[u] = edgecnt;
}
int main()
{
scanf("%d%d%d", &n, &m, &s);
init();
int u, v, w;
for (int i = 0; i <= m-1; i++)
{
scanf("%d%d%d", &u, &v, &w);
addegde(u, v, w);
}
for (int i = 1; i <= n; i++) dis[i] = inf;
dis[s] = 0;
long long minn;
int expa = s;
while (!dict[expa])
{
dict[expa] = 1;
for (int i = h[expa]; i != -1; i = edge[i].next)
{
if (!dict[edge[i].to] && dis[edge[i].to] > dis[expa]+edge[i].w)
dis[edge[i].to] = dis[expa]+edge[i].w;
}
minn = inf;
for (int i = 1; i <= n; i++)
{
if (dis[i] < minn && !dict[i])
{
minn = dis[i];
expa = i;
}
}
}
for (int i = 1; i <= n; i++) printf("%lld ", dis[i]);
return 0;
}
求解qwq