Cod sursa(job #1759994)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 20 septembrie 2016 08:00:07
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <stdio.h>
#define maxn 30005
#define maxm 100005
int lg[maxn],lista[maxn],ind[maxn];
struct muchie{int vecin,dist,next;};
muchie v[2*maxm];
int main(){
    FILE *fin,*fout;
    fin=fopen("sate.in","r");
    fout=fopen("sate.out","w");
    int i,n,m,s,f,st,dr,x,y,d;
    fscanf(fin,"%d%d%d%d",&n,&m,&s,&f);
    for(i=1;i<=m;i++){
        fscanf(fin,"%d%d%d",&x,&y,&d);
        v[i].vecin=y;
        v[i].dist=d;
        v[i].next=ind[x];
        ind[x]=i;
        v[i+m].vecin=x;
        v[i+m].dist=d;
        v[i+m].next=ind[y];
        ind[y]=i+m;
    }
    st=1;
    dr=1;
    lista[st]=s;
    lg[s]=1;//fiecare lungime va fi cu 1 mai mult
    while(st<=dr){
        i=ind[lista[st]];
        while(i!=0){
            if(lg[v[i].vecin]==0){
                dr++;
                lista[dr]=v[i].vecin;
                if(v[i].vecin<lista[st])
                    lg[v[i].vecin]=lg[lista[st]]-v[i].dist;
                else
                    lg[v[i].vecin]=lg[lista[st]]+v[i].dist;
            }
            i=v[i].next;
        }
        st++;
    }
    fprintf(fout,"%d",lg[f]-1);
    fclose(fin);
    fclose(fout);
    return 0;
}