Cod sursa(job #606890)

Utilizator vladtarniceruVlad Tarniceru vladtarniceru Data 10 august 2011 13:11:17
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
# include <fstream>
# include <vector>
# include <queue>
using namespace std;

ifstream f ("sate.in");
ofstream g ("sate.out");

vector <int> A[30001], B[30001];
int n, m, X, Y, x, y, cost, dmin[30001];
queue <int> Q;

char s[50];
int ind;

void BFs (int X)
{
    Q.push (X);
    for (; !Q.empty (); Q.pop ())
    {
        int ret = Q.front (), siz = A[ret].size ();
        for (int i = 0; i < siz; ++i)
        {
            if (!dmin[A[ret][i]])
            {
                dmin[A[ret][i]] = dmin[ret] + B[ret][i];
                Q.push (A[ret][i]);
            }
            if (A[ret][i] == Y)
            {
                g << dmin[A[ret][i]] << '\n';
                return ;
            }
        }
    }
}

int take_number ()
{
    int ret = 0;
    while (s[ind] >= '0' && s[ind] <= '9')
        ret = ret * 10 + s[ind] - '0', ++ind;
    ++ind;
    return ret;
}
int main ()
{
    f.getline (s, 48);
    n = take_number ();
    m = take_number ();
    X = take_number ();
    Y = take_number ();
    for (int i = 1; i <= m; ++i)
    {
        f.getline (s, 48);
        ind = 0;
        x = take_number ();
        y = take_number ();
        cost = take_number ();
        A[x].push_back (y);
        B[x].push_back (cost);
        A[y].push_back (x);
        B[y].push_back (cost * (-1));
    }
    BFs (X);
    g.close ();
    return 0;
}