Cod sursa(job #2553245)

Utilizator victorzarzuZarzu Victor victorzarzu Data 21 februarie 2020 19:34:15
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>
#define oo 0x3f3f3f3f
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,m;
vector<pair<int,int>> graf[50001];
int dist[50001];

void Read()
{
    f>>n>>m;
    int x,y,cost;
    for(int i = 1;i <= m;++i)
    {
        f>>x>>y>>cost;
        graf[x].push_back(make_pair(y, cost));
    }
    memset(dist, oo, sizeof(dist));
}

void Solve()
{
    priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> pq;
    pq.push(make_pair(0,1));
    dist[1] = 0;
    while(!pq.empty())
    {
        int node = pq.top().second;
        pq.pop();

        for(vector<pair<int,int>>::iterator it = graf[node].begin();it != graf[node].end();++it)
        {
            int to = (*it).first;
            int cost = (*it).second;

            if(dist[to] > dist[node] + cost)
            {
                dist[to] = dist[node] + cost;
                pq.push(make_pair(dist[to],to));
            }
        }
    }
    for(int i = 2;i <= n;++i)
        g<<(dist[i] == oo ? 0 : dist[i])<<" ";
}

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