Cod sursa(job #1048853)

Utilizator hrazvanHarsan Razvan hrazvan Data 6 decembrie 2013 15:27:12
Problema Sate Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <stdio.h>
#define N 30000
#define M 100024
FILE *in,*out;
typedef struct{
    int nr,next,val;
}lista;
lista v[2*M+1];
int ult[N+1],rez[N+1],q[N+1];

void bfs(int in1, int in2){
    int sus=0,jos=0,i,prim,x,y,c;
    rez[in1]=0;
    q[sus]=in1;
    sus++;
    while(jos<sus&&rez[in2]==-1){
        x = q[jos];
        i=ult[q[jos]];
        while(i>0){
            y = v[i].nr;
            c = v[i].val;
            if(rez[y]==-1){
                q[sus]=y;
                sus++;
                rez[y] = rez[x] + c;
            }
            i=v[i].next;
        }
        jos++;
    }
    return ;
}

int main(){
    in=fopen("sate.in","r");
    out=fopen("sate.out","w");
    int n,m,x,y,i,a,b,c,k;
    fscanf(in,"%d%d%d%d",&n,&m,&x,&y);
    k=0;
    for(i=1;i<=m;i++){
        fscanf(in,"%d%d%d",&a,&b,&c);
        k++;
        v[k].val=c;
        v[k].nr=b;
        v[k].next=ult[a];
        ult[a]=k;
        k++;
        v[k].val=-c;
        v[k].nr=a;
        v[k].next=ult[b];
        ult[b]=k;
    }
    for(i=1;i<=n;i++)   rez[i]=-1;
    int nr;
    bfs(x,y);
    fprintf(out,"%d",rez[y]);
    return 0;
}