Cod sursa(job #3237114)

Utilizator Sorin_GabrielGabara Sorin Gabriel Sorin_Gabriel Data 5 iulie 2024 10:57:46
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <fstream>
#include <set>
#include <queue>
#include <vector>
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");


set<pair<int,int>> q;
//valoarea, nodul , nodul din care pleaca cu valoarea respectiva
vector<vector< pair<int,int> >> graf;
vector<pair<int,int>> linie;
vector<int> cost_min;

int main()
{
    ios_base::sync_with_stdio(false);
    int n,m,i,j,k,x,cost,nod;
    auto it = q.end();
    pair<int,int> p;
    fin>>n>>m;
    for(i=0;i<=n;i++)
    {
        graf.push_back(linie);
        cost_min.push_back(2000000000);
    }
    cost_min[1]=0;

    for(i=0;i<m;i++)
    {
        fin>>j>>k>>x;
        graf[j].push_back({x,k});
        graf[k].push_back({x,j});
    }
    q.insert({0,1});
    while(q.begin()!=q.end())
    {
        it=q.begin();
        p=*it;
        cost=p.first;
        nod=p.second;
        q.erase(it);
        for(i=0;i<graf[nod].size();i++)
        {
            if(cost+graf[nod][i].first<cost_min[graf[nod][i].second])
            {
                cost_min[graf[nod][i].second]=cost+graf[nod][i].first;
                q.insert({ cost_min[graf[nod][i].second] , graf[nod][i].second });
            }
        }
    }
    for(i=2;i<=n;i++)
        fout<<cost_min[i]<<' ';
    fout<<'\n';



    return 0;
}