Cod sursa(job #2465310)

Utilizator hhhhhhhAndrei Boaca hhhhhhh Data 29 septembrie 2019 20:07:24
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n,m,x,y,val,sol[50001];
vector<pair<int,int>>lista[50001];
set<pair<int,int>>coada;
int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        fin>>x>>y>>val;
        lista[x].push_back(make_pair(y,val));
        lista[y].push_back(make_pair(x,val));
        sol[i]=-1;
    }
    for(int i=0;i<lista[1].size();i++)
    {
        coada.insert(make_pair(lista[1][i].second,lista[1][i].first));
        sol[lista[1][i].first]=lista[1][i].second;
    }
    while(!coada.empty())
    {
        auto it=coada.begin();
        int nod=(*it).second;
        int cost=(*it).first;
        for(int i=0;i<lista[nod].size();i++)
            if(sol[lista[nod][i].first]==-1||sol[lista[nod][i].first]>cost+lista[nod][i].second)
            {
                sol[lista[nod][i].first]=cost+lista[nod][i].second;
                coada.insert(make_pair(lista[nod][i].second+cost,lista[nod][i].first));
            }
        coada.erase(it);
    }
    for(int i=2;i<=n;i++)
        fout<<sol[i]<<" ";
    return 0;
}