Cod sursa(job #2825597)

Utilizator rares89_Dumitriu Rares rares89_ Data 4 ianuarie 2022 21:25:02
Problema Sate Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>
#include <vector>
#include <bitset>
#define INF 0x3f3f3f3f

using namespace std;

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

int n, m, x, y, dp[30005];
vector< pair<int, int> > G[30005];
bitset<30005> v;

void dfs(int nod) {
    v[nod] = true;
    for(auto i : G[nod]) {
        if(!v[i.first]) {
            if(i.first > nod) {
                dp[i.first] = min(dp[i.first], i.second + dp[nod]);
            } else {
                dp[i.first] = min(dp[i.first], dp[nod] - i.second);
            }
            dfs(i.first);
        }
    }
}

int main() {
    fin >> n >> m >> x >> y;
    if(x > y) {
        swap(x, y);
    }
    for(int i = 1; i <= n; i++) {
        dp[i] = INF;
    }
    dp[x] = 0;
    for(int i = 1; i <= m; i++) {
        int a, b, c;
        fin >> a >> b >> c;
        if(a == x) {
            dp[b] = c;
        }
        G[a].push_back({b, c});
        G[b].push_back({a, c});
    }
    dfs(x);
    fout << dp[y];
    return 0;
}