Cod sursa(job #1100299)

Utilizator popoiu.georgeGeorge Popoiu popoiu.george Data 6 februarie 2014 19:35:24
Problema Sate Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.02 kb
#include<fstream>
#include<queue>
#define inf "sate.in"
#define outf "sate.out"
#define NMax 30100
using namespace std;
 
fstream f(inf,ios::in),g(outf,ios::out);
 
int N,M,X,Y;
int D[NMax];
int viz[NMax];
queue<int> coada;
 
struct nod
{
int info;
int cost;
nod *next;
};
 
nod *LA[NMax];
 
inline void add(int a,int b,int c)
{
nod *t=new nod;
t->info=b;
t->cost=c;
t->next=LA[a];
LA[a]=t;
}
 
void read()
{
int a,b,c;
f>>N>>M>>X>>Y;
for(int i=1; i<=M; i++) f>>a>>b>>c , add(a,b,c) , add(b,a,c);
}
 
void solve()
{
nod *t;
int s;
coada.push(X); viz[X]=1;
while( !coada.empty() )
    {
    s = coada.front(); coada.pop();
    t = LA[s];
    while( t )
        {
        if( !viz[ t->info ] )
            {
            viz[ t->info ] = 1; coada.push( t->info );
            if( t->info > s ) D[ t->info ] = D[s] + t->cost ;
            else D[ t->info ] = D[s] - t->cost ;
            if( t->info == Y ) { g<<D[Y]; return; }
            }
        t=t->next;
        }
    }
}
 
int main()
{
read();
solve();
f.close();
g.close();
return 0;
}