Cod sursa(job #297675)

Utilizator O_NealS. Alex O_Neal Data 5 aprilie 2009 15:28:04
Problema Sate Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include<stdio.h>


int n,x,y,xx,yy,s,d;
long m,dist[2100],aux,c,a[2020][2020],p[2100],b[2100];


void BF(int k,int k2)
  {
      b[1]=k;
      p[k]=1;
      s=d=1;
      while(s<=d && !p[k2])
        {
            for(int i=1; i<=n && !p[k2] ; i++)
               if( !p[i] && a[b[s]][i]!=32000 )
                 {
                     p[i]=1;
                     d++;
                     b[d]=i;
                     if(i>b[s]) dist[i]=dist[b[s]]+a[b[s]][i];
                           else dist[i]=dist[b[s]]-a[b[s]][i];
                 }    
            s++;
       }
     printf("%ld",dist[k2]);
                 
  }
  
  
int main()
 {
     freopen("sate.in","r",stdin);
     freopen("sate.out","w",stdout);
     scanf("%d%ld%d%d",&n,&m,&x,&y);
     
     for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j++)
            a[i][j]=32000;
           
     for(int i=1; i<=m; i++)
        { scanf("%d%d%ld",&xx,&yy,&c); a[xx][yy]=a[yy][xx]=c; }
        
     if(x<y) BF(x,y);
          else BF(y,x);
     
//     printf("\n\n");
//     for(int i=1; i<=n; i++)
//        printf("%ld ",b[i]);
//

//    printf("\n\n");
//    for(int i=1; i<=n; i++)
//        {for(int j=1; j<=n; j++)
//            printf("%6d ",a[i][j]);
//         printf("\n");         
//        }
//     
     //printf("%d",n);
     return 0;
 }