Cod sursa(job #1479524)

Utilizator tudormaximTudor Maxim tudormaxim Data 31 august 2015 15:50:20
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <bits/stdc++.h>
using namespace std;

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

const int nmax = 50005;
const int INF = 1e9;
int n, d[nmax];
set < pair < int, int > > s;
vector < int > graf[nmax], cost[nmax];

void dijkstra()
{
    int dad, son, dist, c;
    for(int i = 2; i <= n; i++)
        d[i] = INF;
    s.insert(make_pair(0, 1));
    while(!s.empty())
    {
        dist=s.begin()->first;
        dad=s.begin()->second;
        s.erase(s.begin());
        for(int i=0; i<graf[dad].size(); i++)
        {
            son=graf[dad][i];
            c=cost[dad][i];
            if(d[son] > dist+c)
            {
                d[son]=dist+c;
                s.insert(make_pair(d[son], son));
            }
        }
    }
}

int main()
{
    int m, a, b, c;
    fin >> n >> m;
    for(int i = 1; i <= m; i++)
    {
        fin >> a >> b >> c;
        graf[a].push_back(b);
        cost[a].push_back(c);
    }
    dijkstra();
    for(int i = 2; i <= n; i++)
    {
        if(d[i] == INF) fout << 0 << " ";
        else fout << d[i] << " ";
    }
    return 0;
}