Pagini recente » Cod sursa (job #2972771) | Cod sursa (job #2763334) | Cod sursa (job #2878550) | Cod sursa (job #2960186) | Cod sursa (job #524501)
Cod sursa(job #524501)
#include <cstdio>
#include <iostream>
#include <vector>
#include <queue>
#define NMAX 30010
using namespace std;
vector< pair<int,int> > v[NMAX];
queue<int> q;
int N, M, X, Y, i, j, d[NMAX], D;
void read(void)
{
FILE *f = fopen("sate.in", "r");
fscanf(f, "%d%d%d%d", &N, &M, &X, &Y);
while(M--)
{
fscanf(f, "%d%d%d", &i, &j, &D);
v[i].push_back( make_pair(j, D) );
v[j].push_back( make_pair(i, -D));
}
fclose(f);
}
void print(void)
{
FILE *g = fopen("sate.out", "w");
fprintf(g, "%d", d[Y] - 1);
fclose(g);
}
void solve(void)
{
q.push(X);
d[X] = 1;
while(!q.empty())
{
int nod = q.front();
q.pop();
for(i = 0; i < v[nod].size(); ++i)
{
int adiacNod = v[nod][i].first;
if(!d[adiacNod])
{
q.push(adiacNod);
d[adiacNod] = d[nod] + v[nod][i].second;
if(adiacNod == Y)
{
print();
break;
}
}
}
}
}
int main(void)
{
read();
solve();
return 0;
}