Cod sursa(job #3296272)

Utilizator Iustin_Mircea2010Iustin Mircea Iustin_Mircea2010 Data 12 mai 2025 11:39:18
Problema Algoritmul lui Dijkstra Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int nmax = 5e4 + 1, inf = 1e17;

struct Edge{
    int cost, to;
    bool operator <(const Edge &x) const{
        return cost < x.cost;
    }
    bool operator >(const Edge &x) const{
        return cost > x.cost;
    }
};

vector<Edge> adj[nmax];
int takes[nmax];
int cmin[nmax];
set<Edge> s;

void solve(int start){
    s.insert({0, start});
    while(!s.empty()){
        int curr = s.begin()->to;
        int C = s.begin()->cost;
        s.erase(s.begin());
        for(auto [x, y] : adj[curr]){
            if(cmin[y] > cmin[curr] + x){
                takes[y] = curr;
                s.erase({cmin[y], y});
                cmin[y] = cmin[curr] + x;
                s.insert({cmin[y], y});
            }
        }
    }
}

signed main()
{
    ifstream fin("dijkstra.in");
    ofstream fout("dijkstra.out");

    int n, m, a, b, c, start = 1;
    fin >> n >> m;
    for(int i = 1; i <= m; i++){
        fin >> a >> b >> c;
        adj[a].push_back({c, b});
    }
    for(int i = 1; i <= n; i++)
        cmin[i] = inf;
    cmin[start] = 0;
    takes[start] = -1;
    solve(start);

    for(int i = 2; i <= n; i++){
        //if(i == start) continue;
        if(cmin[i] == inf)
            fout << 0 << " ";
        else
            fout << cmin[i] << " ";
    }

    return 0;
}