#include<bits/stdc++.h>
using namespace std;
int head[100001], edge[100001], to[100001], nxt[100001], d[500001], cnt;
bool v[100001];
int n, m, s, tot;
priority_queue< pair<int, int> > q;
void add( int x, int y, int z )
{
to[tot] = y;
edge[++tot] = z;
nxt[tot] = head[x];
head[x] = cnt;
}
void dijkstra()
{
memset(d,0x3f,sizeof(d));
d[s] = 0;
q.push( make_pair(0, s) );
while( !q.empty() )
{
int x=q.top().second; q.pop();
if(v[x]) continue;
v[x] = 1;
for( int i = head[x]; i; i = nxt[i] )
{
int y = to[i],z = edge[i];
if( d[y] > d[x] + z )
{
d[y] = d[x] + z;
q.push( make_pair(d[y], y) );
}
}
}
}
int main()
{
cin>>n>>m>>s;
for(int i = 1; i <= m; i++)
{
int x, y, z;
cin>>x>>y>>z;
add( x, y, z );
}
dijkstra();
for( int i = 1; i <= n; i++ )
cout<<d[i]<<" ";
return 0;
}
为什么样例输出 0 1061109567 1061109567 1061109567(0x3f)
真心求助,有帮助地关注