Cod sursa(job #3281937)

Utilizator razvanigarazvaniga stanos razvaniga Data 4 martie 2025 10:13:10
Problema Algoritmul lui Dijkstra Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.95 kb
#include <iostream>
#include <set>
#include <fstream>
#include <vector>
#include <climits>


using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

vector <pair <long long, long long>> graph[50005];
long long n, m, start;
long long dist[50005];
set <pair <long long, long long>> node_distance;

const long long inf = 1ll << 59;

void receive_data();
void dijkstra();
void print_data();

int main()
{
    receive_data();

    dijkstra();

    print_data();

    return 0;
}

void print_data()
{
    for(long long i = 2; i <= n; i ++)
        if(dist[i] == inf)
            fout << "0 ";
        else
            fout << dist[i] << ' ';
}

void dijkstra()
{
    for(long long i = 1; i <= n; i ++)
        dist[i] = inf;

    node_distance.insert(make_pair(0, start));

    dist[start] = 0;

    while(!node_distance.empty())
    {
        pair <long long, long long> igga;
        igga = *node_distance.begin();

        long long current_node = igga.second;

        for(long long i = 0; i < graph[current_node].size(); i ++)
        {
            long long neighbor = graph[current_node][i].first;
            long long weight = graph[current_node][i].second;

            if(dist[neighbor] > dist[current_node] + weight)
            {
                if(node_distance.find({dist[neighbor], neighbor}) != node_distance.end())
                    node_distance.erase({dist[neighbor], neighbor});

                node_distance.insert(make_pair(dist[current_node] + weight, neighbor));
                dist[neighbor] = dist[current_node] + weight;
            }
        }

        node_distance.erase(node_distance.begin());
    }
}

void receive_data()
{
    fin >> n >> m;
    start = 1;

    long long first, second, weight;

    for(long long i = 1; i <= m; i ++)
    {
        fin >> first >> second >> weight;

        graph[first].push_back(make_pair(second, weight));
    }
}