Cod sursa(job #2605590)

Utilizator Chirac_MateiChiriac Matei Chirac_Matei Data 25 aprilie 2020 15:10:02
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
struct drum
{
    int y;
    long long len;
    drum(int y, long long len)
    {
        this->y=y;
        this->len=len;
    }
    bool operator<(drum b) const
    {
        return len<b.len;
    }
};
struct nodS
{
    vector <drum> vecini;
    long long len;
};

int n,m,i,x,y;
long long cost;
nodS nod[50005];
multiset <drum> s;
void dijkstra()
{
    while(!s.empty())
    {
        int poz=s.begin()->y;
        long long len=s.begin()->len;
        s.erase(s.begin());

        if(nod[poz].len!=-1)
            continue;

        nod[poz].len=len;

        for(auto it : nod[poz].vecini)
        {
            if(nod[it.y].len==-1)
                s.insert(drum(it.y, len+it.len));
        }
    }
}
int main()
{
    fin>>n>>m;
    for(i=1;i<=m;i++)
    {
        fin>>x>>y>>cost;
        nod[x].vecini.push_back(drum(y, cost));
        nod[y].vecini.push_back(drum(x, cost));
    }

    for(i=1;i<=n;i++)
        nod[i].len=-1;
    s.insert(drum(1, 0));
    dijkstra();

    for(i=2;i<=n;i++)
        fout<<nod[i].len<<' ';
    return 0;
}