Cod sursa(job #68223)

Utilizator pauldbPaul-Dan Baltescu pauldb Data 27 iunie 2007 10:32:11
Problema Sate Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <stdio.h>
#include <vector>
#include <stdlib.h>

using namespace std;

#define maxn 30010
#define pb push_back

int n,m,x,y,l;
vector <int> a[maxn],c[maxn];
int g[maxn],cost[maxn],s[maxn];

int main()
{
    freopen("sate.in","r",stdin);
    freopen("sate.out","w",stdout);
    
    int i,px,py,pz,j;
    
    scanf("%d %d %d %d ",&n,&m,&x,&y);
    
    for (i=1;i<=m;i++)
    {
        scanf("%d %d %d ",&px,&py,&pz);
        a[px].pb(py);
        a[py].pb(px);
        c[px].pb(pz);
        c[py].pb(pz);
    }
    
    for (i=1;i<=n;i++) g[i]=a[i].size();
    
    memset(cost,-1,sizeof(cost));
    cost[1]=0;
    l=1;
    s[1]=1;
    
    for (i=1;i<=l;i++)
      for (j=0;j<g[s[i]];j++)
        if (cost[a[s[i]][j]]==-1)
        {
             s[++l]=a[s[i]][j];
             if (s[l]<s[i]) cost[s[l]]=cost[s[i]]-c[s[i]][j];
             else cost[s[l]]=cost[s[i]]+c[s[i]][j];
        }
        
    printf("%d\n",cost[y]-cost[x]);
    
    return 0;
}