Pagini recente » Cod sursa (job #2102260) | Cod sursa (job #2893576) | Cod sursa (job #984066) | Cod sursa (job #1701095) | Cod sursa (job #1321501)
#include <cstdio>
#include <vector>
#include <utility>
#include <queue>
using namespace std;
#define pb push_back
#define mp make_pair
#define Nmax 30001
FILE *f=fopen ("sate.in","r");
FILE *g=fopen ("sate.out","w");
queue < int > Q;
vector < pair <int,int> > G[Nmax];
int N, M;
int cost[Nmax];
void BFS (int start, int finish){
int aux;
vector < pair <int,int> > :: iterator it;
if (start == finish) return;
Q.push(start);
cost[start] = 1;
while ( !Q.empty() ){
aux = Q.front();
Q.pop();
for (it = G[aux].begin(); it < G[aux].end(); ++it){
if (cost[it -> first] == 0){
cost[it -> first] = cost[aux] + it -> second;
if (it -> first == finish)
return;
Q.push (it -> first);
}
}
}
}
int main(){
int start, finish, x, y, c;
fscanf (f,"%d%d%d%d",&N,&M,&start,&finish);
for (int i = 1; i <= M ; ++i){
fscanf (f,"%d%d%d",&x,&y,&c);
G[x].pb ( mp (y, c) );
G[y].pb ( mp (x,-c) );
}
BFS (start, finish);
fprintf (g,"%d",cost[finish]-1);
return 0;
}