Pagini recente » Cautari ortogonale | Cod sursa (job #1174944) | Cod sursa (job #3136469) | Cod sursa (job #415397) | Cod sursa (job #3202031)
#include <fstream>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
int a[3][200050], start[30005], c[30005], d[30005], viz[30005], sn;
void bfs(int nod);
int main()
{
int n, m, x1;
fin >> n >> m >> x1 >> sn;
int x, y, k = 0, i;
for (i = 1; i <= m; i++) {
k++;
fin >> x >> y >> a[2][k];
a[0][k] = y;
a[1][k] = start[x];
start[x] = k;
k++;
a[0][k] = x;
a[1][k] = start[y];
start[y] = k;
a[2][k] = a[2][k - 1];
}
bfs(x1);
fout << d[sn];
return 0;
}
void bfs(int nod)
{
int ps = 1, pi = 1, x;
c[ps] = nod;
viz[nod] = 1;
while (pi <= ps && viz[sn] == 0) {
x = start[c[pi]];
while (x) {
if (viz[a[0][x]] == 0) {
viz[a[0][x]] = 1;
if (c[ps] > a[0][x])
d[a[0][x]] = d[c[pi]] - a[2][x];
else
d[a[0][x]] = d[c[pi]] + a[2][x];
c[++ps] = a[0][x];
}
x = a[1][x];
}
pi++;
}
}