Cod sursa(job #2096342)

Utilizator patcasrarespatcas rares danut patcasrares Data 28 decembrie 2017 23:10:28
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<fstream>
#include<queue>
#include<vector>
#define DN 50005
#define pb push_back
#define x first
#define y second
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n,dpr[DN],dpp[DN],a,b,c,m;
priority_queue<pair<int,int> >q;
vector<pair<int,int> >v[DN];
void ve()
{
    int nod,cost,newcost;
    while(!q.empty())
    {
        nod=q.top().y;
        cost=-q.top().x;
        q.pop();
        if(cost!=dpr[nod])
            continue;
        for(auto i:v[nod])
        {
            newcost=cost+i.y;
            if(dpp[i.x]==0||newcost<dpr[i.x])
            {
                dpr[i.x]=newcost;
                dpp[i.x]=1;
                q.push({-newcost,i.x});
            }
        }
    }
}
int main()
{
    dpp[1]=1;
    fin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        fin>>a>>b>>c;
        v[a].pb({b,c});
    }
    q.push({0,1});
    ve();
    for(int i=2;i<=n;i++)
        fout<<dpr[i]<<' ';
}