Cod sursa(job #1156753)

Utilizator CristinaElenaFMI Ciort Elena Cristina CristinaElena Data 27 martie 2014 22:55:23
Problema Sate Scor 0
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[x]=0;
    l=1;
    s[1]=x;
     
    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;
}