Cod sursa(job #1414867)

Utilizator tudoras8tudoras8 tudoras8 Data 3 aprilie 2015 10:33:13
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <cstdio>
#include <cstring>
#include <vector>
#include <set>

using namespace std;

const int MAXN = 50005, MAXM = 250005;
const long long INF = 0x3f3f3f;

int N, M, d[MAXN];
vector<int> G[MAXN], C[MAXN];
set< pair<int,int> > T;

void solve() {
    int i, j, k, val, x;

    for (i = 2; i <= N; i++) d[i] = INF;
    T.insert(make_pair(0, 1));

    while (T.size() > 0) {
        val = T.begin()->first, x = T.begin()->second;
        T.erase(*T.begin());

        for (i = 0; i < G[x].size(); i++) {
            if (d[ G[x][i] ] > d[x] + C[x][i]) {
                d[ G[x][i] ] = d[x] + C[x][i];
                T.insert(make_pair(d[G[x][i]], G[x][i]));
            }
        }
    }
}

int main() {
    freopen("dijkstra.in", "r", stdin);
    freopen("dijkstra.out", "w", stdout);

    int i, a, b, c;

    scanf("%d %d", &N, &M);

    for (i = 1; i <= M; i++) {
        scanf("%d %d %d", &a, &b, &c);
        G[a].push_back(b);
        C[a].push_back(c);
    }

    solve();

    for (i = 2; i <= N; i++)
        printf("%d ", d[i] == INF ? 0 : d[i]);

    return 0;
}