Pagini recente » Cod sursa (job #906697) | Cod sursa (job #315127) | Cod sursa (job #1095454) | Cod sursa (job #583317) | Cod sursa (job #1706023)
#include <stdio.h>
#include <vector>
#include <queue>
using namespace std;
vector <pair <int, int> > gf[30002];
vector <pair <int, int> > :: iterator it;
queue <int> Q;
FILE *fin = fopen("sate.in", "r");
FILE *fout = fopen("sate.out", "w");
int N, M, X, Y;
int dist[30002];
void BFS(){
int u;
pair<int, int> per;
while(!Q.empty()){
u = Q.front();
Q.pop();
for(it = gf[u].begin(); it != gf[u].end(); it++){
per = *it;
if(dist[per.first] == 0){
Q.push(per.first);
if(per.first > u)
dist[per.first] = dist[u] + per.second;
else
dist[per.first] = dist[u] - per.second;
}
}
}
}
int main(){
int i, j, cost, k1, k2;
fscanf(fin, "%d %d %d %d", &N, &M, &X, &Y);
for(i = 1; i <= M; i++){
fscanf(fin, "%d %d %d", &k1, &k2, &cost);
gf[k1].push_back(make_pair(k2, cost));
gf[k2].push_back(make_pair(k1, cost));
}
dist[X] = 1;
Q.push(X);
BFS();
fprintf(fout, "%d\n", dist[Y] - 1);
return 0;
}