Cod sursa(job #1699636)

Utilizator panteapaulPantea Paul panteapaul Data 8 mai 2016 01:34:42
Problema Sate Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <unordered_map>

using namespace std;

typedef pair<short,int> paer;
short x, y;
int sol;

void df(short sat, deque<paer> *vecini, unordered_map<short, int> *distante) {
    if (sat == y) {
        sol = (*distante)[sat];
    }

    for (int i=0; i<vecini[sat].size() && !sol; i++) {
        if (!(*distante)[vecini[sat][i].first]) {
            if (sat > vecini[sat][i].first) {
                (*distante)[vecini[sat][i].first] = (*distante)[sat] - vecini[sat][i].second;
            }
            else {
                (*distante)[vecini[sat][i].first] = (*distante)[sat] + vecini[sat][i].second;
            }

            df(vecini[sat][i].first, vecini, distante);
        }
    }
}

int main()
{
    ifstream in("sate.in");
    ofstream out("sate.out");

    deque<paer> vecini[30001];
    unordered_map<short,int> distante;

    short n, a, b;
    int d, i, m;
    in>>n>>m>>x>>y;

    for (i=0; i<m; i++) {
        in>>a>>b>>d;
        vecini[a].push_back(paer(b,d));
        vecini[b].push_back(paer(a,d));
    }

    df(x, vecini, &distante);
    out<<sol;

    in.close();
    out.close();
    return 0;
}