Cod sursa(job #1059674)

Utilizator Paula-ElenaPaula-Elena Margarit Paula-Elena Data 16 decembrie 2013 21:11:21
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <fstream>
#include <queue>
#include <vector>
using namespace std;

ifstream fin("sate.in");
ofstream fout("sate.out");

const int MAXN = 30011;

int N, M, X, Y, dist[MAXN], viz[MAXN];
vector < pair <int, int> > G[MAXN];
queue <int> q;

void citire()
{
    fin >> N >> M >> X >> Y;
    for (int i = 0; i < M; ++i)
    {
        int x, y, cost;
        fin >> x >> y >> cost;
        G[x].push_back(make_pair(y, cost));
        G[y].push_back(make_pair(x, cost));
    }
}

void BFS()
{
    ++viz[X];
    q.push(X);

    while ( !q.empty() )
    {
        int tata = q.front();
        int L = G[tata].size();
        q.pop();

        for (int i = 0; i < L; ++i)
        {
            int fiu = G[tata][i].first;
            int cost = G[tata][i].second;
            if ( viz[fiu] < G[fiu].size() )
            {
                ++viz[fiu];
                q.push(fiu);
                if ( tata < fiu )
                    dist[fiu] = dist[tata] + cost;
                else
                    dist[fiu] = dist[tata] - cost;
            }
        }
    }
}

int main ()
{
    citire();

    BFS();

    fout << dist[Y];

    fin.close();
    fout.close();

    return 0;
}