Pagini recente » Cod sursa (job #51117) | Cod sursa (job #3240507) | Cod sursa (job #1169383) | Cod sursa (job #365206) | Cod sursa (job #365223)
Cod sursa(job #365223)
#include <cstdio>
#include <queue>
using namespace std;
#define DIM 30005
struct nod
{
int capat, cost;
nod *next;
};
int myabs(int x){ return x<0 ? -x:x;}
nod *v[DIM];
int n, m, x, y, uz[DIM], dist[DIM];
queue <int> Q;
void solve()
{
Q.push(x);
uz[x] = 1;
int varf;
nod *t;
while (1)
{
varf = Q.front();
t = v[ varf ];
Q.pop();
while (t != NULL)
{
if (!uz[ t -> capat])
{
if ((t -> capat) > varf) //daca vecinu ii in dreapta
dist[ t->capat ] = dist[ varf ] + (t -> cost);
else //daca vecinu ii in stanga
dist[ t->capat ] = dist[ varf ] - (t -> cost);
uz[ t -> capat ] = 1;
Q.push(t -> capat);
if ((t -> capat) == y)
{
FILE *f = fopen("sate.out", "w");
fprintf(f, "%d\n", myabs(dist[y]));
fclose(f);
return;
}
}
t = t->next;
}
}
}
int main()
{
FILE *f = fopen("sate.in", "r");
fscanf(f, "%d%d%d%d", &n, &m, &x, &y);
int i, j, c;
for (i = 1; i <= n; ++i)
v[i] = NULL;
nod *t;
for (; m; --m)
{
fscanf(f, "%d%d%d", &i, &j, &c);
t = new nod;
// a[i][j]
t -> capat = j;
t -> cost = c;
t -> next = v[i];
v[i] = t;
//a[j][i]
t = new nod;
t -> capat = i;
t -> cost = c;
t -> next = v[j];
v[j] = t;
}
fclose(f);
solve();
return 0;
}