Pagini recente » Cod sursa (job #1773322) | Cod sursa (job #1443693) | Cod sursa (job #1561035) | Cod sursa (job #790818) | Cod sursa (job #1577421)
#include <iostream>
#include <fstream>
#include <string.h>
#define N 300010
#define M 1000250
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
class lista {
public:
int inc[N];
int vf[M];
int dist[M];
int urm[M];
int len;
int bfsN[N];
int bfsA[N];
bool bfsV[N];
void add(int x, int y, int d){
len++;
vf[len] = y;
dist[len] = d;
urm[len] = inc[x];
inc[x] = len;
}
void read(int x){
int i = inc[x];
while (i != 0) {
int varf = vf[i];
//Fa ceva
i = urm[i];
}
}
int bfs(int x, int y){
memset(bfsV, 0, sizeof(bool) * N);
int i = 0, n = 0;
bfsN[n] = x;
bfsA[n] = 0;
n++;
while (i < n && bfsN[i] != y) {
int k = inc[bfsN[i]];
while (k != 0) {
if (!bfsV[vf[k]]) {
bfsN[n] = vf[k];
bfsV[vf[k]] = true;
bfsA[n] = bfsA[i] + dist[k];
n++;
}
k = urm[k];
}
i++;
}
return bfsA[i];
}
} l;
int main() {
int n, m, x, y, a, b, d;
fin >> n >> m >> x >> y;
for (int i = 0; i <= m; i++) {
fin >> a >> b >> d;
if (a > b)
d = -d;
l.add(a, b, d);
l.add(b, a, -d);
}
fout << l.bfs(x, y);
fin.close();
fout.close();
return 0;
}