Pagini recente » Cod sursa (job #216979) | Diferente pentru preoni-2007/clasament/runda-4/11-12 intre reviziile 2 si 1 | Cod sursa (job #1874428) | Cod sursa (job #2680143) | Cod sursa (job #244920)
Cod sursa(job #244920)
#include <stdio.h>
#include <stdlib.h>
#define N 30005
#define MOD 32
int n,m,X,Y,p=1,s;
int *a[N],*b[N],coada[N],sum[N],ok[N];
void bfs(int x){
for(int i=1;i<=a[coada[x]][0] && !s;i++)
if(ok[a[coada[x]][i]]==0){
coada[++coada[0]]=a[coada[x]][i];
if(a[coada[x]][i]>coada[x]) p=1;
else p=-1;
sum[coada[0]]=sum[x]+p*b[coada[x]][i];
ok[a[coada[x]][i]]=1;
if(a[coada[x]][i]==Y) s=sum[coada[0]];
}
}
int main(){
int i,x1,x2,d;
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&X,&Y);
for(i=1;i<=n;i++){
a[i]=(int*)malloc(8);a[i][0]=0;
b[i]=(int*)malloc(8);b[i][0]=0;
}
for(i=1;i<=m;i++){
scanf("%d%d%d",&x1,&x2,&d);
a[x1][0]++;b[x1][0]++;
a[x2][0]++;b[x2][0]++;
if(a[x1][0]%MOD==1) {
a[x1]=(int*)realloc(a[x1],(a[x1][0]+MOD)*4);
b[x1]=(int*)realloc(b[x1],(b[x1][0]+MOD)*4);
}
if(a[x2][0]%MOD==1){
a[x2]=(int*)realloc(a[x2],(a[x2][0]+MOD)*4);
b[x2]=(int*)realloc(b[x2],(b[x2][0]+MOD)*4);
}
a[x1][a[x1][0]]=x2;b[x1][b[x1][0]]=d;
a[x2][a[x2][0]]=x1;b[x2][b[x2][0]]=d;
}
coada[0]=1;
coada[1]=X;
ok[X]=1;
for(i=1;i<=coada[0] && !s;i++)
bfs(i);
printf("%d\n",s);
return 0;
}