Cod sursa(job #1259017)

Utilizator Sanduleac_VladSanduleac Vllad Alexandru Sanduleac_Vlad Data 9 noiembrie 2014 17:10:02
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <cstdio>
#include <utility>
#include <vector>
#include <queue>
using namespace std;

long N, M;
long viz[50001];
bool vz[50001];
vector<pair<long, long> > v[50001];
queue<long> q;
long a, b, l;

int main() {
    long i, j, crt;
    freopen("dijkstra.in", "r", stdin);
    freopen("dijkstra.out", "w", stdout);
    scanf("%ld %Ld", &N, &M);
    for(i = 1; i <= M; i++) {
        scanf("%ld %ld %ld", &a, &b, &l);
        v[a].push_back(make_pair(b, l));
        //v[b].push_back(make_pair(a, l));
    }
    vz[1] = true;
    viz[1] = 0;
    q.push(1);
    while(!q.empty()) {
        crt = q.front();
        for(i = 0; i < v[crt].size(); i++) {
            if(!vz[v[crt][i].first] || viz[v[crt][i].first] > v[crt][i].second + viz[crt]) {
                vz[v[crt][i].first] = true;
                viz[v[crt][i].first] = v[crt][i].second + viz[crt];
                q.push(v[crt][i].first);
            }
        }
        q.pop();
    }
    for(i = 2; i <= N; i++) {
        printf("%ld", viz[i]);
        if(i != N)
            printf(" ");
        else printf("\n");
    }
    return 0;
}