Pagini recente » Cod sursa (job #546593) | Cod sursa (job #898944) | Cod sursa (job #474788) | Cod sursa (job #1401238) | Cod sursa (job #1706744)
#include <stdio.h>
#include <string.h>
#include <vector>
#include <queue>
#define oo 0x3f3f3f3f
#define NMax 50010
using namespace std;
int N, M;
int T[NMax];
bool expanded[NMax];
vector< pair<int, int> > ad[NMax];
priority_queue< pair<int, int> > q;
void dijkstra( int start ) {
q.push({0, start});
memset(T, 0x3f, sizeof(T));
memset(expanded, 0, sizeof(expanded));
T[start] = 0;
while ( !q.empty() ) {
int nod = q.top().second; q.pop();
if ( expanded[nod] ) continue;
expanded[nod] = true;
for ( int i = 0; i < (int) ad[nod].size(); ++ i )
if ( T[ad[nod][i].first] > T[nod] + ad[nod][i].second ) {
T[ad[nod][i].first] = T[nod] + ad[nod][i].second;
q.push({-T[ad[nod][i].first], ad[nod][i].first});
}
}
}
int main() {
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
scanf("%d%d", &N, &M);
for ( int i = 1; i <= M; ++ i ) {
int x, y, c;
scanf("%d%d%d", &x, &y, &c);
ad[x].push_back({y, c});
}
dijkstra(1);
for ( int i = 1; i <= N; ++ i )
T[i] = T[i] == oo ? 0 : T[i];
for ( int i = 2; i <= N; ++ i )
printf("%d ", T[i]);
printf("\n");
return 0;
}