Cod sursa(job #1920678)

Utilizator tidehyonBosoi Bogdan tidehyon Data 10 martie 2017 09:15:03
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <climits>
#include <set>

using namespace std;

ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
#define N 50005

set < pair <int, int > > T;                 ///heap
vector < int > L[N], C[N];      ///Lista de adiacenta + Lista de costuri
int d[N];                        ///vector de distante a costurilor, luam tot ce e mai avantajos
int m;
unsigned short n;

void Citire()
{
    fin >> n >> m;
    int c, x, y;
    for(int i = 1; i <= m; i++)
    {
        fin >> x >> y >> c;
        L[x].push_back(y);
        C[x].push_back(c);
    }
    fin.close();
}

void Dijkstra(int k)
{
    int i, val, x;
    T.insert(make_pair(0, 1));
    for(i = 2; i <= n; i++)
        d[i] = INT_MAX;
    while(T.size() > 0)
    {
        val = (*T.begin()).first;
        x   = (*T.begin()).second;
        T.erase(*T.begin());
        for(i = 0; i < L[x].size(); i++)
            if(d[L[x][i]] > val + C[x][i])
            {
                d[L[x][i]] = val + C[x][i];
                T.insert(make_pair(d[L[x][i]], L[x][i]));
            }
    }
    for(int i = 2; i <= n; i++)
        if(d[i] == INT_MAX)
        fout << 0 << " ";
        else
        fout << d[i] << " ";
    fout << "\n";
}

int main()
{
    Citire();
    Dijkstra(1);
    return 0;
}