Cod sursa(job #3370384)

Utilizator Alexandru6041Alexandru Chelariu Alexandru6041 Data 25 octombrie 2026 21:35:16
Problema Sate Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream>
#include <vector>
#include <cmath>
#include <queue>

int nr_sate, nr_relatii, start, dest;

std::vector < std::vector < std::pair <int, int> > > liste;
std::queue <int> q;

int main() {
    std::ifstream in("sate.in");
    in >> nr_sate >> nr_relatii >> start >> dest;

    liste.assign(nr_sate + 1, std::vector < std::pair <int, int> >());

    for(int i = 1; i <= nr_relatii; i++) {
        int rel_origin, rel_dest, distance;
        in >> rel_origin >> rel_dest >> distance;
        
        liste[rel_origin].push_back({rel_dest, distance});
        liste[rel_dest].push_back({rel_origin, -distance});
    }
    in.close();

    std::vector <int> poz(nr_sate + 1, 0);
    std:: vector <bool> viz(nr_sate + 1, false);

    poz[start] = 0;
    viz[start] = true;
    q.push(start);

    while(!q.empty()) {
        int nod = q.front();
        q.pop();    

        for(auto [vecin, deplasare] : liste[nod]) {
            if(!viz[vecin]) {
                viz[vecin] = true;
                poz[vecin] = poz[nod] + deplasare;
                q.push(vecin);
            }
        }
    }

    std::ofstream out("sate.out");
    out<< std::abs(poz[dest]);
    out.close();
    
    return 0;
}