Cod sursa(job #317348)

Utilizator taloibogdanTaloi Bogdan Cristian taloibogdan Data 23 mai 2009 12:44:08
Problema Sate Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#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;
}