Cod sursa(job #606892)

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

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

vector < pair <int, int> > A[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].first])
            {
                dmin[A[ret][i].first] = dmin[ret] + A[ret][i].second;
                Q.push (A[ret][i].first);
            }
            if (A[ret][i].first == Y)
            {
                g << dmin[A[ret][i].first] << '\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 ();
        pair <int, int> aaa = make_pair (y, cost);
        A[x].push_back (aaa);
        aaa = make_pair (x, -cost);
        A[y].push_back (aaa);
    }
    BFs (X);
    g.close ();
    return 0;
}