Pagini recente » Cod sursa (job #1088889) | Cod sursa (job #1014505) | Cod sursa (job #1012122) | Istoria paginii runda/info_bv_11-12_1/clasament | Cod sursa (job #1040243)
#include <cstdio>
#include <vector>
#define NMAX 30005
using namespace std;
FILE * fin = fopen("sate.in", "r");
FILE * fout = fopen("sate.out", "w");
void citire();
void rezolvare();
void BFS(int);
int n, m, x, y;
vector <int> M[NMAX];
vector <int> C[NMAX];
int viz[NMAX];
int main()
{
citire();
rezolvare();
return 0;
}
void citire()
{
int i, a, b, c;
fscanf(fin, "%d %d %d %d", &n, &m, &x, &y);
for (i = 1; i <= m; i ++)
{
fscanf(fin, "%d %d %d", &a, &b, &c);
M[a].push_back(b);
C[a].push_back(c);
M[b].push_back(a);
C[b].push_back(-c);
}
}
void rezolvare()
{
BFS(x);
fprintf(fout, "%d\n", viz[y]);
}
void BFS(int x)
{
int i, Coada[NMAX], ic, sf, v;
Coada[1] = x; viz[x] = 0;
ic = 1; sf = 1;
while (ic <= sf)
{
v = Coada[ic];
ic ++;
for (i = 0; i < M[v].size(); i ++)
if (viz[M[v][i]] == 0)
{
sf ++;
Coada[sf] = M[v][i];
viz[M[v][i]] = viz[v] + C[v][i];
if (M[v][i] == y)
{
ic = sf + 1;
break;
}
}
}
}