Cod sursa(job #2682758)

Utilizator AndreibatmanAndrei Croitoriu Andreibatman Data 9 decembrie 2020 16:06:17
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct ceva
{
    int nod;
    long long cost;
    bool operator < (const ceva &x)const
    {
        return cost>x.cost;
    }
}gr,u;
priority_queue<ceva>q;
vector<ceva>v[50010];
int n,m,i,j,viz[50010],d[50010],a,b,c;
int main()
{
    fin>>n>>m;
    for(i=1;i<=n;i++)
        d[i]=INT_MAX;
    for(i=1;i<=m;i++)
    {
        fin>>a>>b>>c;
        gr.nod=b;
        gr.cost=c;
        v[a].push_back(gr);
    }
    d[1]=0;
    gr.nod=1;
    gr.cost=0;
    q.push(gr);
    while(!q.empty())
    {
        gr=q.top();
        if(!viz[gr.nod])
        {
            viz[gr.nod]=1;
            for(auto it=v[gr.nod].begin();it!=v[gr.nod].end();++it)
            {
                ceva v=*it;
                if(d[v.nod]>gr.cost+v.cost)
                {
                    d[v.nod]=d[gr.nod]+v.cost;
                    u.nod=v.nod;
                    u.cost=d[v.nod];
                    q.push(u);
                }
            }
        }
        q.pop();
    }
    for(i=2;i<=n;i++)
        if(d[i]==INT_MAX)
            fout<<-1<<" ";
        else fout<<d[i]<<" ";
    return 0;
}