Cod sursa(job #2476368)

Utilizator filiptudose2007Tudose Filip filiptudose2007 Data 18 octombrie 2019 18:31:46
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
#include <vector>
#include <queue>
#define inf 0x3f3f3f3f
using namespace std;
int n,m,d[50100],sel[50100],k,i,x,y,cost;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
vector <pair <int,int> > G[50100];
priority_queue <pair <int,int> ,vector <pair <int,int> > ,greater < pair <int,int> > > Q;
void dijkstra(int p)
{
    for (auto i: G[p]) {
        Q.push(i);
        d[i.second]=i.first;
    }
    sel[p]=true;
    while (!Q.empty())
    {
        while (!Q.empty()&&sel[Q.top().second])
            Q.pop();
        if (!Q.empty())
        {
            k=Q.top().second;
            sel[k]=true;
            Q.pop();
            for (auto i: G[k])
                if (d[i.second]>d[k]+i.first)
            {
                d[i.second]=d[k]+i.first;
                Q.push({d[i.second],i.second});
            }
        }
    }
}
int main()
{
        f>>n>>m;
        for (i=1;i<=m;++i)
        {
            f>>x>>y>>cost;
            G[x].push_back({cost,y});
        }
        for (i=2;i<=n;++i)
            d[i]=inf;
        dijkstra(1);
        for (i=2;i<=n;++i)
        {
            if (d[i]==inf) g<<0;
            else g<<d[i];
            g<<" ";
        }
    return 0;
}