Cod sursa(job #3374550)

Utilizator aspaNadu Tudor aspa Data 9 noiembrie 2026 02:06:15
Problema Sate Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <bits/stdc++.h>
using namespace std;

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

// first = target, second = distance
vector<pair<int, int>> A[30001];
int visited[30001];

int End, Start, total_dist = 0;

void dfs(int k) {
    int target, dist;
    for (auto &p : A[k]) {
        if (!visited[p.first]) {
            target = p.first;
            dist = p.second;

            visited[target] = 1;
            cout << target << " ";
            if (target == End) {
                // daca start (X) > end (Y) => -distanta
                fout << abs(total_dist + dist);
                return;
            }

            if (target > k) {
                total_dist += dist;
            }
            else {
                total_dist -= dist;
            } 

            dfs(target);
            total_dist -= dist;
        }
    }
}

int main() {
    int N, M, X, Y;
    fin >> N >> M >> X >> Y;

    int x, y, d;
    for (int i = 0; i < M; i++) {
        fin >> x >> y >> d;
        A[x].push_back({y, d});
        A[y].push_back({x, d});
    }

    /*
        DFS(start = X/Y)
        +
        If target > current => total_distance += d(target, current)
        else if target < current -= d(target, current)

        te intorci din dfs si !found_Y(/X) => total_distance -= d(target, current)
    */

    End = Y;
    Start = X;

    visited[Start] = 1;
    dfs(Start);

    return 0;
}