Pagini recente » Cod sursa (job #700091) | Monitorul de evaluare | Cod sursa (job #1343840) | Istoria paginii runda/brasov_10_jr | Cod sursa (job #1706446)
#include <cstdio>
#include <vector>
#include <queue>
#define DIM 50005
#define INF 0x3f3f3f
#define pb push_back
using namespace std;
int dist[DIM];
int in_queue[DIM];
vector < pair<int, int> > v[DIM];
priority_queue < pair<int, int> > Q;
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
int n, m, i, j, x, y, c, s, t, d;
scanf("%d%d",&n,&m);
for( i = 1; i <= m; ++i ){
scanf("%d%d%d",&x,&y,&c);
v[x].pb({c,y});
}
for( i = 2; i <= n; ++i ) dist[i] = INF;
Q.push({0,1});
while( !Q.empty() ){
x = Q.top().second;
y = -Q.top().first;
Q.pop();
if ( in_queue[x] ) continue;
in_queue[x] = true;
for( i = 0; i < v[x].size(); ++i ){
if( dist[v[x][i].second] > v[x][i].first + y ){
dist[v[x][i].second] = v[x][i].first + y;
Q.push({-dist[v[x][i].second],v[x][i].second});
}
}
}
for( i = 2; i <= n; ++i )
if( dist[i] != INF ) printf("%d ",dist[i]);
else printf("0 ");
return 0;
}