Cod sursa(job #2491558)

Utilizator MariusblockMoga Marius-Ioan Mariusblock Data 12 noiembrie 2019 19:16:33
Problema Algoritmul lui Dijkstra Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <bits/stdc++.h>
#define MOD 1999999973
#define ull unsigned long long
#define FOR(i, a, b) for(i = a; i <= b; i++)

using namespace std;

ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

vector<pair<int,int>> G[50005];
int viz[50005];
int val[50005];
int n;
const int inf = INT_MAX;

int minim(){
    int solval = inf;
    int sol,i;
    FOR(i,1,n){
        if(solval > val[i] && viz[i] == 0){
            solval = val[i];
            sol = i;
        }
    }
    return sol;
}

int main()
{
    int m,i,a1,a2,c1,j,minslct,vecin,costv;
    fin>>n>>m;
    FOR(i,1,m){
        fin>>a1>>a2>>c1;
        G[a1].push_back(make_pair(a2,c1));
    }
    FOR(i,2,n){
        val[i] = inf;
    }
    FOR(i,1,n){
        minslct = minim();
        viz[minslct] = 1;
        for(j = 0; j < G[minslct].size();j++){
            vecin = G[minslct][j].first;
            costv = G[minslct][j].second;
            if(val[vecin] > val[minslct] + costv){
                val[vecin] = val[minslct] + costv;
            }
        }
    }
    for(i = 2; i <= n; i++){
        if(val[i] == inf)
            fout<<"0 ";
        else
            fout<<val[i]<<' ';
    }
    return 0;
}