Cod sursa(job #2298576)

Utilizator Vlad_NituNitu Vlad-Petru Vlad_Nitu Data 8 decembrie 2018 11:30:42
Problema Sate Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
	#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;
	}