Cod sursa(job #2568711)

Utilizator CozminelDanielLupu Cosmin-Daniel CozminelDaniel Data 4 martie 2020 09:34:26
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.48 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#define nmax 50005
#define oo 1e9
#include <bitset>

using namespace std;

vector < pair < int, int > > adjacents[nmax];
priority_queue < pair < int, int > > PQ;
bitset < nmax > v;
int d[nmax], n, m, sol[nmax];

void Read()
{
    ifstream fin("dijkstra.in");
    int x, y, c;
    fin >> n >> m;
    for(int i = 1; i <= m; i++)
    {
        fin >> x >> y >> c;
        adjacents[x].push_back(make_pair(y, c));
        adjacents[y].push_back(make_pair(x, c));
    }
    fin.close();
}

void Dijkstra(int vertex)
{
    int n, y, x, cost;
    v.reset();
    d[vertex] = 0;
    PQ.push(make_pair(0, vertex));
    while(!PQ.empty())
    {
        x = PQ.top().second;
        PQ.pop();
        if(!v[x])
        {
            v[x] = 1;
            for(auto it : adjacents[x])
            {
                y = it.first;
                cost = it.second;
                cout << d[x] << " " << cost;
                if(d[y] > d[x] + cost)
                {
                    d[y] = d[x] + cost;
                    PQ.push(make_pair(-d[y], y));
                }
            }
        }
    }
}

void Solve()
{
    ofstream fout("dijkstra.out");
    for(int i = 1; i <= n; i++)
        d[i] = oo;
    Dijkstra(1);
    for(int i = 2; i <= n; i++)
        fout << d[i] << " ";
    fout << "\n";
    fout.close();
}

int main()
{
    Read();
    Solve();
    return 0;
}