Pagini recente » Cod sursa (job #1554424) | Cod sursa (job #2066491) | Cod sursa (job #539564) | Cod sursa (job #1565341) | Cod sursa (job #505900)
Cod sursa(job #505900)
#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 ;
}