Cod sursa(job #1061504)

Utilizator antonioteoZait Teodor Antonio antonioteo Data 19 decembrie 2013 21:29:08
Problema Sate Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.21 kb
#include <fstream>
#include <vector>
#include <queue>
#define INF 24000000
using namespace std;
const char iname[] = "sate.in";
const char oname[] = "sate.out";
ifstream fin(iname);
ofstream fout(oname);
int i , j , x , y , D;
int N , M , X , Y;
int Dmin[ 30008 ];
struct sat
{
    int nod;
    int cost;
};
vector <sat> v[ 30008 ];
queue <int> Q;
sat nod;
int main()
{
    fin >> N >> M >> X >> Y;
    for ( i = 1; i <= N; ++i ) Dmin[ i ] = INF;
    for ( i = 1; i <= M; ++i )
    {
        fin >> x >> y >> nod.cost;
        nod.nod = y; v[ x ].push_back( nod );
        nod.cost *= -1;
        nod.nod = x; v[ y ].push_back( nod );
    }
    Q.push( X );
    Dmin[ X ] = 0;
    while ( !Q.empty() )
    {
        x = Q.front();
        Q.pop();
        for ( i = 0; i < v[ x ].size(); ++i )
        {
            if ( Dmin[ x ] + v[ x ][ i ].cost < Dmin[ v[ x ][ i ].nod ] )
            {
                Dmin[ v[ x ][ i ].nod ] = Dmin[ x ] + v[ x ][ i ].cost;
                Q.push( v[ x ][ i ].nod );
            }
        }
        if ( Dmin[ Y ] > 0 && Dmin[ Y ] != INF )
        {
            fout << Dmin[ Y ] << '\n';
            return 0;
        }
    }
    return 0;
}