Cod sursa(job #1670492)

Utilizator mihaibrk99Mihai Berechet mihaibrk99 Data 31 martie 2016 19:45:17
Problema Sate Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream in("sate.in");
ofstream out("sate.out");
struct drum {
    int destinatie, lungime, ind;
    bool viz;
};
int x, y;
vector<drum> orase[30001];
void rezolva(int,int);

int main() {
    int n, m;
    in>>n>>m>>x>>y;

    for(int i = 1; i <= m; i++) {
        int a, b, c;
        in>>a>>b>>c;
        drum d1, d2;
        d1.destinatie = b; d1.lungime = c;  d1.viz = false; d1.ind = orase[b].size();
        d2.destinatie = a; d2.lungime = -c; d2.viz = false; d2.ind = orase[a].size();

        orase[a].push_back(d1);
        orase[b].push_back(d2);
    }

    rezolva(x, 0);

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

void rezolva(int orasinit, int lungime) {
    if(orasinit == y) {
        if(lungime < 0) lungime *= -1;
        out<<lungime;
    }
    else {
        for(vector<drum>::iterator it = orase[orasinit].begin(); it != orase[orasinit].end(); ++it) {
            if(!it->viz) {
                it->viz = true;
                orase[it->destinatie][it->ind].viz = true;
                rezolva(it->destinatie, lungime + it->lungime);
            }
        }
    }
}