Cod sursa(job #1793226)

Utilizator danyvsDan Castan danyvs Data 30 octombrie 2016 20:33:36
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>
#include <algorithm>
#include <vector>
#include <queue>

using namespace std;

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

const int NMAX = 30001;

vector < pair < int, int > > V[NMAX];
int n, m, X, Y;
int D[NMAX];

void read()
{
    int i, x, y, d;
    fin >> n >> m >> X >> Y;
    for (i = 1; i <= m; ++ i)
        {
         fin >> x >> y >> d;
         V[x].push_back(make_pair(y, d));
         V[y].push_back(make_pair(x, -d));
        }
}

void bfs(int source)
{
    queue < int > Q;
    int nod, i;
    bool viz[NMAX] = {false};
    Q.push(source);
    viz[source] = true;
    while (!Q.empty())
        {
         nod = Q.front();
         Q.pop();
         for (i = 0; i < V[nod].size(); ++ i)
            if (!viz[V[nod][i].first] || D[nod] + V[nod][i].second < D[V[nod][i].first])
                {
                 Q.push(V[nod][i].first);
                 viz[V[nod][i].first] = true;
                 D[V[nod][i].first] = D[nod] + V[nod][i].second;
                }
        }
}

int main()
{
    read();
    fin.close();
    bfs(X);
    fout << D[Y] << "\n";
    fout.close();
    return 0;
}