Cod sursa(job #1453921)

Utilizator sabauandrei98Sabau Andrei sabauandrei98 Data 25 iunie 2015 00:55:50
Problema Algoritmul lui Dijkstra Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.56 kb
#include <iostream>
#include <limits.h>
#include <cmath>
#include <string>
#include <stdio.h>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#include <stack>
#include <map>
#include <fstream>
#include <list>
#include <queue>
#include <iomanip>
#include <deque>
#include <set>

using namespace std;

ifstream f("dijkstra.in");
ofstream g("dijkstra.out");

#define cin f
#define cout g
#define mm 50001
#define inf (1<<30)
#define pb push_back
#define mp make_pair
#define node first
#define cost second

set < pair<int,int> > q;
vector < pair<int, int> > v[mm];
int dist[mm];


void Init(int noduri)
{
    for(int i = 2; i<=noduri; i++)
        dist[i] = inf;
}

void Dijkstra(int nod)
{
    dist[nod] = 0;
    q.insert(mp(nod,dist[nod]));

    while(!q.empty())
    {
        int sursa = q.begin() -> first;
        int cost_sursa = q.begin() -> second;
        q.erase(q.begin());

        for(auto i: v[sursa])
            if ( cost_sursa + i.cost  < dist[i.node])
            {
                dist[i.node] = cost_sursa + i.cost;
                q.insert(mp(i.node, dist[i.node]));
            }
    }
}

void Afisare(int noduri)
{
    for(int i = 2; i<=noduri; i++)
        if (dist[i] != inf)
            cout<<dist[i]<<" ";
        else
            cout<<0<<" ";
}

int main()
{
    int n, m;
    cin >> n >> m;
    for(int i = 1; i<=m; i++)
    {
        int x, y, z;
        cin >> x >> y >> z;
        v[x].pb(mp(y,z));
    }

    Init(n);
    Dijkstra(1);
    Afisare(n);

return 0;
}