Pagini recente » Cod sursa (job #238149) | Cod sursa (job #472909) | Cod sursa (job #1220682) | Cod sursa (job #398256)
Cod sursa(job #398256)
#include<cstdio>
#include<vector>
using namespace std;
const int N=30005,M=1000001,INF=20000005;
int n,m,x,y,c[N],q[M],p,u,s[N];
bool vy;
struct xy{
int to,c;
};
vector <xy> v[N];
void read()
{
int j,k,l,a;
xy aux;
scanf("%d%d%d%d",&n,&m,&x,&y);
while(m--)
{
scanf("%d%d%d",&j,&k,&l);
if(k<j)
{
a=j;
j=k;
k=a;
}
aux.to=k;
aux.c=l;
v[j].push_back(aux);
aux.to=j;
aux.c=-l;
v[k].push_back(aux);
++s[j];
++s[k];
}
}
void ini()
{
for( int i=1 ; i<=n ; ++i )
if( i!=x )
c[i]=INF;
}
void check(int j )
{
if(j==y)
vy=1;
for( int i=0 ; i<s[j] ; ++i )
if( c[ v[j][i].to ] > c[j]+v[j][i].c )
{
c[v[j][i].to]=v[j][i].c+c[j];
q[++u]=v[j][i].to;
}
}
void bfs()
{
p=1;
u=1;
q[1]=x;
while(p<=u&&vy==0)
{
check(q[p]);
++p;
}
}
int main()
{
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
read();
ini();
bfs();
printf("%d",c[y]);
return 0;
}