Cod sursa(job #2166141)

Utilizator nedelcu11Nedelcu Mihai Vlad nedelcu11 Data 13 martie 2018 15:43:31
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,m,p,x,y,c;
const int inf=1000000000;
vector <pair<int,int> > v[50010];
priority_queue<pair<int,int>,vector<pair<int,int> >, greater<pair<int,int> > > srt;
int viz[50010],d[50010];
int main()
{   f>>n>>m;
    while(f>>x>>y>>c)
    {   v[x].push_back({c,y});
    }
    p=1;
    for(int i=1;i<=n;i++) d[i]=inf;
    d[p]=0;
    srt.push(make_pair(0,p));
    while(!srt.empty())
    {   pair<int,int> t=srt.top();
        srt.pop();
        int cost=t.first;
        int nod=t.second;
        if(!viz[nod])
        {   viz[nod]=1;
            vector<pair<int,int> > :: iterator it=v[nod].begin(),sf=v[nod].end();
            for(;it!=sf;it++)
                if(d[it->second]>cost+it->first)
            {   d[it->second]=cost+it->first;
                srt.push({d[it->second],it->second});
            }
        }
    }
    for(int i=2;i<=n;i++)
        if(d[i]!=inf) g<<d[i]<<' ';
        else g<<"0\n";
    return 0;
}