Cod sursa(job #68669)

Utilizator VmanDuta Vlad Vman Data 28 iunie 2007 23:49:39
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <stdio.h>
#include <vector>
#define Nmax 30001
#define Mmax 100025
using namespace std;

vector<int> g[Nmax];
int N,M,X,Y,a[Mmax],b[Mmax],d[Mmax],nr[Nmax],c[Nmax],D[Nmax],i;

void bfs()
{
 int st=1,dr,p;
 D[c[dr=st]=X]=1;
 while (st<=dr)
       {
       p=c[st];
       for (i=0;i<nr[p];++i)
           if (a[g[p][i]]==p)
              {
              if (D[ b[ g[p][i] ] ]==0)
                 {
                 c[++dr] = b[ g[p][i] ];
                 D[ c[dr] ] = D[ p ] + d[ g[p][i] ];
                 }
              }
              else if (D[ a[ g[p][i] ] ]==0)
                   {
                   c[++dr] = a[ g[p][i] ];
                   D[ c[dr] ] = D[ p ] - d[ g[p][i] ];
                   }
       ++st;
       if (D[Y]!=0) return;
       }
}

int main()
{
 freopen("sate.in","r",stdin);
 scanf("%d %d %d %d",&N,&M,&X,&Y);
 for (i=1;i<=M;++i)
     {
     scanf("%d %d %d",&a[i],&b[i],&d[i]);
     g[a[i]].push_back(i);
     g[b[i]].push_back(i);
     ++nr[a[i]];
     ++nr[b[i]];
     }
 fclose(stdin);
 bfs();
 freopen("sate.out","w",stdout);
 printf("%d",D[Y]-1);
 fclose(stdout);
 return 0;
}