Cod sursa(job #2027317)

Utilizator tanasaradutanasaradu tanasaradu Data 25 septembrie 2017 21:49:59
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int nmax=50001;
const int inf=(2<<25);
priority_queue<pair<int,int> >c;
vector<pair<int,int> >L[nmax];
int d[nmax],n,m;
bool viz[nmax];
///Complexitate (M * logN)
///log(n)-folosim priority_queue
inline void Solve()
{
    for(int i=1;i<=n;i++)
        d[i]=inf;
    d[1]=0;
    c.push({1,0});
    while(!c.empty())
    {
        int x=c.top().first;
        c.pop();
        if(!viz[x])
        {
            viz[x]=true;
            for(int i=0;i<L[x].size();i++)
            {
                int p=L[x][i].first;
                int q=L[x][i].second;
                if(d[p]>d[x]+q)
                {
                    d[p]=d[x]+q;
                    c.push({p,-d[p]});
                }
            }
        }
    }
    for(int i=2;i<=n;i++)
        if(d[i]==inf)
            fout<<"0 ";
    else fout<<d[i]<<" ";
    fout<<"\n";
}
int main()
{
    fin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int nod1,nod2,cost;
        fin>>nod1>>nod2>>cost;
        L[nod1].push_back({nod2,cost});
    }
    Solve();
    fin.close();
    fout.close();
    return 0;
}