Pagini recente » Cod sursa (job #2831419) | Cod sursa (job #2359834) | Cod sursa (job #1790805) | Cod sursa (job #1494470) | Cod sursa (job #2298576)
#include <string.h>
#include <stdio.h>
struct point { int v,c ; point *l; } *G[30001];
int U[30001],Q[30001],n,m,src,dst,dist;
void edge ( int x , int y , int c )
{
point *p= new point;
p->v = y;
p->c = c;
p->l = G[x];
G[x] = p;
}
void ReadData ()
{
int x,y,c,i;
freopen ( "sate.in" , "r" , stdin );
scanf ( "%d %d %d %d" , &n , &m , &src , &dst );
memset ( G , 0 , sizeof ( G ) );
for ( i=0 ; i<m ; i++ )
{
scanf ( "%d %d %d" , &x , &y , &c );
edge ( x , y , c );
edge ( y , x , -c );
}
fclose ( stdin );
}
void WriteData ()
{
freopen ( "sate.out" , "w" , stdout );
printf ( "%d\n" , dist );
fclose ( stdout );
}
int Solve ()
{
point *p;
int fst,lst;
for (Q[0]=src, fst=0, lst=1; fst<lst ; fst++ )
for ( p = G[ Q[fst] ] ; p ; p = p->l )
if (!U[p->v])
{
Q[lst++]=p->v;
U[p->v] = U[ Q[fst] ] + p->c;
if (p->v == dst ) return U[dst];
}
return 0;
}
int main ()
{
ReadData ();
dist = Solve ();
WriteData ();
return 0;
}