Pagini recente » Cod sursa (job #2410330) | Cod sursa (job #2283508) | Cod sursa (job #2904773) | Clasament div1 | Cod sursa (job #553732)
Cod sursa(job #553732)
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<fstream>
#include<stdlib.h>
using namespace std;
const int LGMAX = int(3e4);
int viz[LGMAX], c[LGMAX], dst[LGMAX],
n,m,X,Y;
typedef struct nod
{
int inf,d;
nod *urm;
} TNOD;
TNOD *v[LGMAX],*p;
void add( int a, int b, int ds )
{
p = new TNOD;
p->inf = a;
p->d = ds;
p->urm = v[b];
v[b] = p;
}
void citire()
{
int i,x,y,ds;
ifstream in("sate.in");
in>>n>>m>>X>>Y;
for( i=1; i<=m; i++ )
{
in>>x>>y>>ds;
add( x, y, ds );
add( y, x, -ds );
}
if(X>Y)
{
int q = Y;
Y = X;
X = q;
}
}
void bfs(int ceva, int altceva)
{
int i,j;
j=0;
c[j++] = ceva;
viz[ceva] = 1;
memset(dst,-1,sizeof(dst));
dst[ceva] = 1;
for( i=0; i<=j && dst[altceva]== -1; i++ )
for( p=v[c[i]]; p; p = p->urm )
if( !viz[p->inf] )
{
viz[p->inf] = 1;
c[j++] = p->inf;
dst[p->inf] = dst[c[i]] + p->d;
/*if( p->inf<c[i] ) dst[p->inf] = dst[c[i]] - p->d;
else dst[p->inf] = dst[c[i]] + p->d;*/
}
}
int main()
{
freopen("sate.out","w",stdout);
citire();
bfs( X,Y );
cout<<abs(dst[Y]-1)<<endl;
return 0;
}