Cod sursa(job #3374252)

Utilizator CiulinAndreeaCiulin Andreea Iuliana CiulinAndreea Data 8 noiembrie 2026 21:14:36
Problema Sate Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
/*
Am reprezentat graful folosind liste de adiacență, memorând pentru fiecare muchie distanța dintre cele două sate.
Am atribuit muchiilor sensuri opuse valori cu semne contrare, pentru a putea calcula distanța în ambele direcții.
Am aplicat DFS pornind din satul X, calculând pentru fiecare sat accesibil distanța față de X cu ajutorul vectorului distanta.
La final, am afișat distanța până la satul Y.
Complexitate: O(N + M)
*/
#include <vector>
#include <utility>
#include <fstream>
using namespace std;

ifstream fin("sate.in");
ofstream fout("sate.out");

bool vizitat[30001];
int distanta[30001];
vector<pair<int, int>> graf[30001];

void DFS(int nod) {
    vizitat[nod]=true;

    for (auto vecin : graf[nod]) {
        if (!vizitat[vecin.first]) {
            distanta[vecin.first]=distanta[nod] + vecin.second;
            DFS(vecin.first);
        }
    }
}

int main() {
    int N, M, X, Y ,i,j, d;
    fin>> N>> M>> X>>Y;
    for (int c=1; c<=M; c++) {
        fin>>i>>j>>d;
        graf[i].push_back({j,d});
        graf[j].push_back({i,-d});
    }
    distanta[X]=0;
    DFS(X);
    fout<<distanta[Y];
    fin.close();
    fout.close();
}