Cod sursa(job #1706023)

Utilizator penetavyPene Cosmin-Octavian penetavy Data 21 mai 2016 12:46:10
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#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;
}