Cod sursa(job #1048826)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 6 decembrie 2013 14:42:17
Problema Sate Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <stdio.h>
#define MAXM 100025
#define MAXN 30001
int cost[2*MAXM],val[2*MAXM],next[2*MAXM],last[MAXN],rez[MAXN],coada[MAXN];
char ok[MAXN];
int modul(int a){
    if(a>=0){
        return a;
    }
    return 0-a;
}
int main(){
    int n,m,q,p,x,y,d,k,i,st,dr,poz;
    FILE *fin,*fout;
    fin=fopen("sate.in","r");
    fout=fopen("sate.out","w");
    fscanf(fin,"%d%d%d%d",&n,&m,&q,&p);
    k=0;
    for(i=1;i<=m;i++){
        fscanf(fin,"%d%d%d",&x,&y,&d);
        k++;
        cost[k]=d;
        val[k]=y;
        next[k]=last[x];
        last[x]=k;
        k++;
        cost[k]=0-d;
        val[k]=x;
        next[k]=last[y];
        last[y]=k;
    }
    rez[q]=0;
    st=1;
    dr=2;
    coada[1]=q;
    ok[q]=1;
    while(rez[p]==0){
        x=coada[st];
        st++;
        poz=last[x];
        while(poz!=0){
            y=val[poz];
            if(ok[y]==0){
                rez[y]=rez[x]+cost[poz];
                coada[dr]=y;
                dr++;
                ok[y]=1;
            }
            poz=next[poz];
        }
    }
    fprintf(fout,"%d\n",modul(rez[p]));
    fclose(fin);
    fclose(fout);
    return 0;
}