Pagini recente » Cod sursa (job #2218716) | Cod sursa (job #578403) | Cod sursa (job #1980134) | Cod sursa (job #133893) | Cod sursa (job #1759994)
#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;
}