Pagini recente » Cod sursa (job #2245530) | Cod sursa (job #3266923) | Cod sursa (job #225875) | Cod sursa (job #696256) | Cod sursa (job #1670520)
#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) {
cout<<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);
}
}
}
}
}