Cod sursa(job #133340)

Utilizator bogdanhm999Casu-Pop Bogdan bogdanhm999 Data 8 februarie 2008 12:06:50
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <stdio.h>
#include <vector>
#include <bitset>

using namespace std;

long n,m,x,y,a,b,c,p,q,i,dim,ok,nod;
long l[60000],cl[60000];
vector <int>v[30002];
bool mark[30002];

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,&b,&c);
        v[a].push_back(b);
        v[a].push_back(c);
        v[b].push_back(a);
        v[b].push_back(c);
    }
    
    p=1;q=1;
    l[1]=x;
    mark[x]=1;
    cl[1]=0;
    while (p<=q){
          dim=v[l[p]].size();
          for (i=0;i<dim;i+=2){
              nod=v[l[p]][i];
              if (!mark[nod]){
                 mark[nod]=1;
                 q++;
                 l[q]=nod;
                 if (l[p]<nod)
                    cl[q]=cl[p]+v[l[p]][i+1];
                 else
                     cl[q]=cl[p]-v[l[p]][i+1];
                 if (nod==y){ok=1;break;}
              }
          }
          if (ok){printf("%ld\n",cl[q]);return 0;}
          p++;
    }
    
return 0;
}