Cod sursa(job #3039605)

Utilizator sims_glAlexandru Simion sims_gl Data 28 martie 2023 18:25:46
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.43 kb
#include<iostream>
#include<fstream>
#include<set>
#include<algorithm>
#include<vector>
#define inf 1000000001
using namespace std;
int i, m ;

struct dublu
{
    int dist;
    int nod;
    bool operator<(const dublu & a) const
    {
        return dist < a.dist;
    }

};
vector<dublu> vec[100000];

int d[100000], proces[100000], n, p, x, y, cost;
void dijkstra(int v)
{
    fill(d + 1, d + n + 1, inf);
    d[v] = 0;
    int u;
    set<dublu > s;
    s.insert({d[v], v});
    while(!s.empty())
    {
        dublu x = *(s.begin());

        u = x.nod;
        s.erase(s.begin());
        if(proces[u] == 1)
            continue;
        proces[u] = 1;


        int l = vec[u].size();

        for(int j = 0; j < l; j++ )
        {
            int vecin = vec[u][j].nod;
            if (d[vecin] != inf && !s.empty())
            {
                s.erase(s.find({d[vecin], vecin}));
            }
            d[vecin] = min(d[vecin], d[u] + vec[u][j].dist);
            s.insert({d[vecin], vecin});
        }
    }
}
int main()
{
    freopen("dijkstra.in", "r", stdin);
    freopen("dijkstra.out", "w", stdout);
    cin >> n >> m;
    while(cin >> x >> y >> cost)
    {
        vec[x].push_back({cost, y});
    }
    dijkstra(1);
    for(int i = 2; i <= n; i++)
    {
        if(d[i] == inf)
            cout << 0 << " ";
        else
            cout << d[i] << " ";
    }
    return 0;
}