Cod sursa(job #505900)

Utilizator alutzuAlexandru Stoica alutzu Data 4 decembrie 2010 14:23:34
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<cstdio>
#include<vector>

using namespace std;

const int NMAX=1<<15;

vector <int> mat[NMAX];
vector <int> d[NMAX];
bool f[NMAX];
struct aroganta { int nod , d ; } ;

aroganta q [NMAX];

int main ( )
{
	freopen ( "sate.in", "r", stdin ) ;
	freopen ( "sate.out", "w", stdout ) ;
	
	int n , m , start , fin , i , p , u , c , x , y;
	
	scanf ( "%d%d%d%d", &n,&m, &start,&fin ) ;
	
	for ( i =1 ; i <= m ; ++ i )
	{
		scanf ( "%d%d%d", &x,&y,&c ) ;
		if ( x == start && y == fin )
		{
			printf ( "%d", c ) ;
			return 0;
		}
		mat[x].push_back(y);
		d[x].push_back(c);
		mat[y].push_back(x);
		d[y].push_back(-c);
	}
	p=u=1;
	q[p].nod=start;
	q[p].d = 0 ;
	f[start] = true ;
	
	while ( p <= u )
	{
		int lim = mat[q[p].nod].size();
		for ( c = 0 ; c < lim ; ++c)
		{
			if ( !f[mat[q[p].nod][c]] )
			{
				q[++u].nod = mat[q[p].nod][c];
				q[u].d  = q[p].d + d[q[p].nod][c] ;
				if ( q[u].nod == fin )
				{
					printf ( "%d", q[u]. d ) ;
					return 0 ;
				}
				f[mat[q[p].nod][c]]=true;
			}
		}
		++ p ;
	}
	
	
	return 0 ;
}