Cod sursa(job #2191835)

Utilizator zanugMatyas Gergely zanug Data 3 aprilie 2018 20:37:34
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>

#define pb push_back
#define ll long long

using namespace std;

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

struct par
{
    int nod;
    ll len;
};

class compar
{
public:
    bool operator()(par a, par b)
    {
        return a.len > b.len;
    }
};

const int NMAX = 5e4 + 10;
const int MMAX = 25e4 + 10;

int n, m;
par p;
int x, y, len;
vector < par > v[NMAX];
int er[NMAX];

int main()
{
    fin >> n >> m;
    for(int i = 0; i < m; ++i)
    {
        fin >> x >> y >> len;

        p.len = len;
/*
        p.nod = x;
        v[y].pb(p);
*/
        p.nod = y;
        v[x].pb(p);
    }

    for(int i = 0; i <= n; ++i)
        er[i] = 0;

    int cnod = 1;
    priority_queue < par, vector<par>, compar> q;

    for(int k = 1; k < n; ++k)
    {
        for(int i = 0; i < v[cnod].size(); ++i)
        {
            p = v[cnod][i];
            p.len += er[cnod];
            q.push(p);
        }
        do
        {
            p = q.top();
            if(er[p.nod] != 0)
                q.pop();
        }while(er[p.nod] != 0 && q.size());

        if(!q.size())
            break;

        cnod = p.nod;
        er[cnod] = p.len;
        q.pop();
    }

    for(int i = 2; i <= n; ++i)
        fout << er[i] << " ";

    return 0;
}