Cod sursa(job #1670521)

Utilizator mihaibrk99Mihai Berechet mihaibrk99 Data 31 martie 2016 20:10:34
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <iostream>
#include <fstream>
#include <vector>
#define MAX 30001
using namespace std;
ifstream in("sate.in");
ofstream out("sate.out");
struct drum {
    int destinatie, lungime;
};
int             n, m, x, y;
vector<drum>    orase[MAX];
bool            viz[MAX],
                ok = true;
void rezolva(int,int);

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

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

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

    viz[x] = true;
    rezolva(x, 0);

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

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