Cod sursa(job #1064607)

Utilizator mariacMaria Constantin mariac Data 22 decembrie 2013 01:55:03
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");

struct nod{
    int vec, cost;
};
int N, M, X, Y, sol = 0;
vector<nod> lv[30009];
int v[30009];
queue<int> q;
void BF()
{
    int nod, i;
    q.push(X);
    v[X] = 1;
    while(!q.empty() && v[Y] == 0)
    {
        int l;
        nod = q.front();
        l = lv[nod].size();
        q.pop();
        for( i = 0; i < l; i++)
            if(!v[lv[nod][i].vec])
        {
            v[lv[nod][i].vec] = v[nod] + lv[nod][i].cost;
            q.push(lv[nod][i].vec);
        }
    }

}
int main()
{
    int i;
    fin >> N >> M >> X >> Y;
    for(i = 1 ; i <= M ; i++)
    {
        nod aux;
        int x, y, c;
        fin >> x >> y >> c;
        aux.vec = y;
        aux.cost = c;
        lv[x].push_back(aux);
        aux.vec = x;
        aux.cost = -c;
        lv[y].push_back(aux);
    }
    if( X > Y)
        {
            int aux;
            aux = Y;
            Y = X;
            X = aux;
        }
    BF();
    fout<<v[Y] - 1;
    return 0;
}