Pagini recente » Cod sursa (job #1914628) | Cod sursa (job #3277995) | Cod sursa (job #1530734) | Cod sursa (job #1925857) | Cod sursa (job #396530)
Cod sursa(job #396530)
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#define NMAX 30100
using namespace std;
struct mainType
{
int nod, cost, igen;
}ob;
vector<mainType> v[NMAX];
int N, M, X, Y, i, j, costTot[NMAX];
void inFu(void)
{
FILE *f = fopen("sate.in", "r");
fscanf(f, "%d%d%d%d", &N, &M, &X, &Y);
for(i = 1; i <= M; ++i)
{
int a, b, c;
fscanf(f, "%d%d%d", &a, &b, &c);
ob.nod = b, ob.cost = c, ob.igen = 1;
v[a].push_back(ob);
ob.nod = a, ob.igen = -1;
v[b].push_back(ob);
}
fclose(f);
}
void solve(void)
{
queue<mainType> q;
memset(costTot, 0, N * sizeof(int));
ob.cost = 0;
ob.nod = X;
ob.igen = 1;
q.push(ob);
costTot[X] = 0;
while(!q.empty())
{
mainType el = q.front();
q.pop();
for(int i = 0; i < v[el.nod].size(); ++i)
{
int nod = el.nod, adiacNod = v[nod][i].nod;
int precNod = nod;
mainType adiac = v[nod][i];
if((!costTot[adiacNod]) || (costTot[adiacNod] > costTot[precNod] + (adiac.cost * adiac.igen)))
q.push(v[nod][i]),
costTot[adiacNod] = costTot[precNod] + (adiac.cost * adiac.igen);
}
}
}
void outFu(void)
{
FILE *g = fopen("state.out", "w");
fprintf(g, "%d", costTot[Y]);
fprintf(g, "\n");
fclose(g);
}
int main(void)
{
inFu();
solve();
outFu();
return 0;
}