Cod sursa(job #134995)

Utilizator bogdanhm999Casu-Pop Bogdan bogdanhm999 Data 12 februarie 2008 19:36:17
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.03 kb
#include <stdio.h>   
#include <stdlib.h>   
#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 <long>v[30002];   
int *v[30002];   
int g[30002],*point;   
bitset <30002>mark;   
  
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);   
        g[a]+=2;   
        g[b]+=2;   
    }   
    for (i=1;i<=n;i++){   
        v[i]=(int *)malloc((g[i]+2)*sizeof(int));   
        g[i]=0;   
    }   
    fseek(stdin,0,SEEK_SET);   
    scanf("%ld %ld %ld %ld",&n,&m,&x,&y);   
    for (;m;m--){   
        scanf("%ld %ld %ld",&a,&b,&c);   
        v[a][++g[a]]=b;   
        v[a][++g[a]]=c;   
        v[b][++g[b]]=a;   
        v[b][++g[b]]=c;   
    }   
    for (i=1;i<=n;i++)   
        v[i][++g[i]]=-1;   
           
    p=1;q=1;   
    l[1]=x;   
    mark[x]=1;   
    cl[1]=0;   
       
    for (;p<=q;p++){   
        for (point=v[l[p]]+1;*point!=-1;point+=2)   
            if (!mark[*point]){   
               mark[*point]=1;   
               l[++q]=*point;   
               if (l[p]<l[q])   
                  cl[q]=cl[p]+*(point+1);   
               else cl[q]=cl[p]-*(point+1);   
               if (l[q]==y){ok=1;break;}   
            }   
        if (ok){printf("%ld\n",cl[q]);return 0;}   
    }   
    /*  
    while (p<=q){  
          for (i=1;i<=g[l[p]];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;   
}