Cod sursa(job #2650248)

Utilizator spartanul300Vasile Andrei spartanul300 Data 17 septembrie 2020 20:11:30
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <bits/stdc++.h>

using namespace std;

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

priority_queue < pair <int,int>, vector < pair <int,int> >, greater < pair <int,int > > > q;
vector < pair <int,int > > v[50100];

int n,dist[50100];

void dijkstra(int nod_start)
{
    int i;
    for(i=1;i<=n;i++)dist[i]=INT_MAX/2;
    dist[nod_start]=0;
    q.push({0,nod_start});

    while(!q.empty())
    {
        int actual_nod=q.top().second;
        int actual_dist=q.top().first;
        q.pop();

        if(dist[actual_nod] >= actual_dist)
        {
            for(i=0;i<v[actual_nod].size();i++)
            {
                int vecin=v[actual_nod][i].first;
                int dist_intre=v[actual_nod][i].second;

                if(dist[actual_nod] + dist_intre < dist[vecin])
                {
                    dist[vecin]=dist[actual_nod] + dist_intre;
                    q.push({dist[vecin],vecin});
                }
            }
        }
    }
}

int m,i,cost,y,x;
int main()
{
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>x>>y>>cost;
        v[x].push_back({y,cost});
    }

    dijkstra(1);

    for(i=2;i<=n;i++)
        if(dist[i]==INT_MAX/2)g<<0<<" ";
        else g<<dist[i]<<" ";
    return 0;
}