Cod sursa(job #1449347)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 9 iunie 2015 12:44:24
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <cstdio>
#include <vector>
#define INF ((1LL<<25)-1)
#define DIM 250100
#define f first
#define s second
using namespace std;

int N, M, W[DIM], D[DIM], minim, pos, X, Y, Z;
vector <pair <int, int> > V[DIM];

inline int Select_Minim(){
    int pos, minim = INF + 100;

    for(int i = 1; i <= N; i ++)
        if(W[i] == 0 && minim > D[i]){
            minim = D[i];
            pos = i;
        }

    return pos;
}

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", &X, &Y, &Z);
        V[X].push_back(make_pair(Y, Z));
    }

    for(int i = 2; i <= N; i ++)
        D[i] = INF;

    for(int k = 1; k <= N; k ++){
        pos = Select_Minim();
        W[pos] = 1;
        for(int i = 0; i < V[pos].size(); i ++){
            X = V[pos][i].f;
            Y = V[pos][i].s;
            if(W[X] == 0 && D[X] > D[pos] + Y)
                D[X] = D[pos] + Y;
        }
    }

    for(int i = 2; i <= N; i ++)
        printf("%d ", D[i]);

    return 0;
}