Cod sursa(job #2036836)

Utilizator AlexTheDagonBogdan Tudor AlexTheDagon Data 11 octombrie 2017 09:43:45
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <iostream>
#include <queue>
#include <fstream>
#include <vector>
#define pb push_back
#define NM 50005
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
struct eee
{
    int nod,cost;
    bool operator < (const eee &a) const
    {
        return cost>a.cost;
    }
};
eee ms(int nn,int cc)
{
    eee fr;
    fr.nod=nn;
    fr.cost=cc;
    return fr;
}
eee fr;
int n,m,a,b,c,dmin[NM],fol[NM];
vector<eee> v[NM];
priority_queue<eee> q;
int main()
{
    in>>n>>m;
    for(int i=1;i<=n;++i)dmin[i]=(1<<30);
    q.push(ms(1,0));
    for(int i=1;i<=m;++i)
    {
        in>>a>>b>>c;
        v[a].pb(ms(b,c));
    }
    dmin[1]=0;
    while(!q.empty())
    {
        while(!q.empty() && fol[q.top().nod])q.pop();
        if(q.empty())continue;
        int nod,cost;
        nod=q.top().nod;
        cost=q.top().cost;
        q.pop();
        for(auto s:v[nod])
        {
            if(dmin[s.nod]>cost+s.cost)
            {
                dmin[s.nod]=cost+s.cost;
                q.push({s.nod,dmin[s.nod]});
            }
        }
    }
    for(int i=1;i<=n;++i)if(dmin[i]==(1<<30))dmin[i]=0;
    for(int i=2;i<=n;++i)out<<dmin[i]<<" ";
    return 0;
}