Pagini recente » Cod sursa (job #1849802) | Cod sursa (job #1032718) | Cod sursa (job #2406154) | Cod sursa (job #1276371) | Cod sursa (job #1048826)
#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;
}