Pagini recente » Cod sursa (job #1401359) | Cod sursa (job #2829555) | Cod sursa (job #1404477) | Cod sursa (job #2829537) | Cod sursa (job #1488958)
#include <fstream>
#include <queue>
#define NMAX 50010
#define MMAX 250010
#define MULT 60000000
using namespace std;
vector<int> graf[NMAX];
int N, M;
int ans[NMAX];
struct muchie {int x, y, c;} mG[MMAX];
void dijkstra (int A) {
ans[A] = 0;
priority_queue< pair <int, int>, vector <pair <int, int> >, greater <pair<int, int> > > PQ;
for (int i = 1; i <= N; i++) {
if (i != A) {
ans[i] = MULT;
}
}
PQ.push (make_pair (ans[A], A));
while ( !PQ.empty ()) {
pair<int, int> crt = PQ.top();
PQ.pop();
if (crt.first <= ans[crt.second]) {
for (int i = 0; i < graf[crt.second].size (); i++) {
muchie mCrt = mG[graf[crt.second][i]];
int tmp = ans[crt.second] + mCrt.c;
if (tmp < ans[mCrt.y]) {
ans[mCrt.y] = tmp;
PQ.push (make_pair (tmp, mCrt.y));
}
}
}
}
}
int main () {
freopen ("dijkstra.in", "r", stdin);
freopen ("dijkstra.out", "w", stdout);
scanf ("%d%d", &N, &M);
for (int i = 1; i <= M; i++) {
scanf ("%d%d%d", &mG[i].x, &mG[i].y, &mG[i].c);
graf[mG[i].x].push_back (i);
}
dijkstra (1);
for (int i = 2; i <= N; i++) {
if (ans[i] == MULT) {
ans[i] = 0;
}
printf ("%d ", ans[i]);
}
printf ("\n");
return 0;
}