Pagini recente » Cod sursa (job #2802075) | Cod sursa (job #1740215) | Cod sursa (job #342163) | Cod sursa (job #3235184) | Cod sursa (job #1670492)
#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);
}
}
}
}