Cod sursa(job #1216245)

Utilizator rangerChihai Mihai ranger Data 3 august 2014 21:27:32
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include<fstream>
#include<set>
#include<vector>
#include<cstring>
#define pb push_back
#define mp make_pair
using namespace std;

ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");

const int NMAX = 50010;
const int inf = 1000000000;

vector< pair<int, int> > g[NMAX];
int n,m,x,y,z,i,d[NMAX];
set < pair<int, int> >  q;
int main()
{
    cin>>n>>m;
    for ( i = 1; i <= m; i++)
    {
        cin >> x >> y >> z;
        g[x].pb(mp(y, z));
    }

    for (i=2;i<=n;i++) d[i]=inf;
    d[1]=0;
    q.insert(mp(d[1],1));
    while (!q.empty())
    {
        int v = q.begin()->second;
        q.erase(q.begin());
        for (i = 0; i < g[v].size(); i++)
        {
            int to = g[v][i].first, len = g[v][i].second;
            if (d[v] + len < d[to])
            {
                q.erase(mp(d[to],to));
                d[to] = d[v] + len;
                q.insert(mp(d[to],to));
            }
        }
    }
    for (i = 2; i <= n; i++)
        if(d[i] == inf) cout<<"0 "; else cout<<d[i]<<" ";
    return 0;
}