Cod sursa(job #3317359)

Utilizator domdiridomdidomDominik domdiridomdidom Data 23 octombrie 2025 12:25:14
Problema Algoritmul Bellman-Ford Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <fstream>
#include <vector>
#include <utility>
#include <climits>
#include <algorithm>

using std::vector;

struct Node{
    vector<std::pair<int, int>> edges;
    int pred, nrEdges;
    Node(){ 
        pred = 0;
        nrEdges = 0;
    }
    void addEdge(std::pair<int, int> x){
        edges.push_back(x);
        nrEdges++;
    }
};

int main(){
    std::ifstream bem("bellmanford.in");
    std::ofstream kim("bellmanford.out");
    int n, m;
    bem >> n >> m;
    vector<Node> nodes(n);
    vector<long> dist(n, 1001);
    dist[0] = 0;
    for(int i = 0; i < m; i++){
        int x, y, cost;
        bem >> x >> y >> cost;
        x--;
        y--;
        nodes[x].addEdge({y, cost});
    }
    
    for(int k = 0; k < n - 1; k++){
        for(int i = 0; i < n; i++)
            for(int j = 0; j < nodes[i].nrEdges; j++)
                dist[nodes[i].edges[j].first] = std::min(
                    dist[i] + nodes[i].edges[j].second,
                    dist[nodes[i].edges[j].first]
                );
                /*if(dist[i] + nodes[i].edges[j].second < dist[nodes[i].edges[j].first]){
                    dist[nodes[i].edges[j].first] = dist[i] + nodes[i].edges[j].second;
                    nodes[j].pred = i;
                }*/
    }
    for(int i = 1; i < n; i++)
        kim << dist[i] << ' ';
    return 0;
}