Cod sursa(job #407953)

Utilizator raica_cristiraica dumitru cristian raica_cristi Data 2 martie 2010 19:08:54
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#include<stdio.h>
#include<vector>
#include<algorithm>
#include<queue>

using namespace std;
#define dim 30030
#define inf 0x3f3f3f3f
#define fs first
#define sc second
#define mp make_pair
#define pb push_back
queue <int>q;
vector <pair < int,int > > v[dim];
int n,m,sf,in;
int dst[dim];
void add(int &x,int &y,int c)
{
     v[x].pb( mp(y,c));
}
void read()
{
     int x,y,c;
     scanf("%d%d%d%d",&n,&m,&in,&sf);
     for(int i=1 ;i<=m; i++)
     {
             scanf("%d%d%d",&x,&y,&c);
             add(x,y,c);
             add(y,x,-c);
     }
}
void bf ()
{
     int nod;
     memset(dst , inf , sizeof(dst));
     dst[in]=0;
     for(q.push(in)  ; !q.empty(); q.pop())
     {
                     nod = q.front();
                     //printf("%d ", nod);
                     for(int i=0 ;i< v[nod].size(); i++)
                     {
                             if( v[nod][i].fs == sf)
                             {
                                 printf("%d",dst[nod]+v[nod][i].sc);
                                 return ;
                             }
                             if( dst [v[nod][i].fs] > dst [ nod ]+ v[nod][i].sc )
                             {
                                  dst [v[nod][i].fs] = dst [ nod ]+ v[nod][i].sc ;
                                  q.push(v[nod][i].fs);
                             }
                     }
     }
}
int main ()
{
    freopen("sate.in","r",stdin);
    freopen("sate.out","w",stdout);
    read();
    bf();
    return 0;
}