Pagini recente » Cod sursa (job #3157052) | Cod sursa (job #344263) | Cod sursa (job #174759) | Cod sursa (job #2214813) | Cod sursa (job #317348)
Cod sursa(job #317348)
#include<stdio.h>
#include<algorithm>
using namespace std;
struct nush{long x,y,d;}a[220000];
struct nasp{long x,y;}st[220000];
long n,m,x,y,i,p,u,f[40000],nr,l[40000];
long cmp(nush a,nush b)
{if(a.x<b.x)return 1;
return 0;}
int main()
{
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
scanf("%ld%ld%ld%ld",&n,&m,&x,&y);
for(i=1;i<=m;++i)
{scanf("%ld%ld%ld",&a[2*i-1].x,&a[2*i-1].y,&a[2*i-1].d);
a[2*i].x=a[2*i-1].y;
a[2*i].y=a[2*i-1].x;
a[2*i].d=a[2*i-1].d;}
sort(a,a+2*m,cmp);
for(i=1;i<=2*m;++i)
if(!f[a[i].x])f[a[i].x]=i;
st[1].x=0;st[1].y=x;
p=0;u=1;
while(p<u)
{++p;
nr=st[p].y;
for(i=f[nr];i<=2*m&&a[i].x==nr;++i)
if(a[i].y!=st[p].x)
{st[++u].x=a[i].x;
st[u].y=a[i].y;
if(st[u].y<st[u].x)a[i].d*=-1;
l[st[u].y]=l[st[u].x]+a[i].d;
if(st[u].y==y){printf("%ld\n",l[y]);return 0;}}}
return 0;
}