Cod sursa(job #1759455)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 19 septembrie 2016 11:17:35
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <stdio.h>
#include <vector>
#define maxn 30005
#define maxm 100005
std::vector <int> vecin[maxn],dist[maxn];
int lg[maxn],lista[maxn];
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);
        vecin[x].push_back(y);
        dist[x].push_back(d);
        vecin[y].push_back(x);
        dist[y].push_back(d);
    }
    st=1;
    dr=1;
    lista[st]=s;
    lg[s]=1;//fiecare lungime va fi cu 1 mai mult
    while(st<=dr){
        m=vecin[lista[st]].size();
        for(i=0;i<m;i++){
            if(lg[vecin[lista[st]][i]]==0){
                dr++;
                lista[dr]=vecin[lista[st]][i];
                if(vecin[lista[st]][i]<lista[st])
                    lg[vecin[lista[st]][i]]=lg[lista[st]]-dist[lista[st]][i];
                else
                    lg[vecin[lista[st]][i]]=lg[lista[st]]+dist[lista[st]][i];
            }
        }
        st++;
    }
    fprintf(fout,"%d",lg[f]-1);
    fclose(fin);
    fclose(fout);
    return 0;
}