Cod sursa(job #2344945)

Utilizator robertkarolRobert Szarvas robertkarol Data 15 februarie 2019 19:08:16
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <bits/stdc++.h>
#define pb push_back
#define INF (1LL<<31) - 1

using namespace std;

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

vector<int> Dijstra(vector<vector <pair<int, int> > >& adj, int V, int s)
{
    vector<int> dist(V + 1, INF);
    vector<bool> visited(V + 1, false);
    priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > q;
    dist[s] = 0;
    q.push({0, s});
    while(!q.empty())
    {
        int current = q.top().second; q.pop();
        visited[current] = true;
        for(const auto& n : adj[current])
            if(dist[n.first] > dist[current] + n.second)
            {
                dist[n.first] = dist[current] + n.second;
                if(!visited[n.first])
                    q.push({dist[n.first], n.first});
            }
    }
    return dist;
}
int main()
{
    vector<vector <pair<int, int> > > adj; // {y, c} in adj[x] <=> exists (x, y) edge with cost c
    int x, y, c, V, E;

    fin >> V >> E;
    adj.resize(V + 1);

    for(int i = 0; i < E; i++)
    {
        fin >> x >> y >> c;
        adj[x].pb({y,c});
    }
    vector<int> result = Dijstra(adj, V, 1);
    for(auto it = result.begin() + 2; it != result.end(); it++)
        fout << (*it != INF ? *it : 0) << " ";
    return 0;
}