Cod sursa(job #797238)

Utilizator Coman95coman cosmin Coman95 Data 13 octombrie 2012 17:25:22
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

#define INF 0x3f3f3f3f

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

int n, m, A, B;
vector<pair<int, int> > g[30001];
queue<int> q;
int d[30001];

void Read();
void BFS( int nod );

int main()
{
    Read();
    BFS( A );
    fout << d[B];
    fin.close();
    fout.close();
    return 0;
}


void Read()
{
    int x, y, c;
    fin >> n >> m >> A >> B;
    for( int i = 1; i <= n; ++i )
        d[i] = INF;
    d[A] = 0;
    for( int i = 1; i <= m; ++i )
    {
        fin >> x >> y >> c;
        g[x].push_back(make_pair( y, c ) );
        g[y].push_back(make_pair( x, -c) );
    }
}
void BFS( int nod )
{
    int x;
    q.push( nod );
    while( !q.empty() )
    {
        x = q.front();
        q.pop();
        for( size_t i = 0; i < g[x].size(); ++i )
            if( d[x]+g[x][i].second < d[g[x][i].first] )
            {
                d[g[x][i].first]=d[x]+g[x][i].second;
                q.push( g[x][i].first );
                if ( g[x][i].first == B )
                    return;

            }
    }
}