Pagini recente » Cod sursa (job #1370880) | Cod sursa (job #1863583) | Cod sursa (job #1217969) | Cod sursa (job #532936) | Cod sursa (job #359627)
Cod sursa(job #359627)
#include<stdio.h>
struct orase
{
int o,d;
} *a[30002];
int nr[30002],c[2][30002],u,p,d,x,y,i,j,z,n,m,viz[30002],l;
FILE *f,*g;
int main(){
f=fopen("sate.in","r");
fscanf(f,"%d %d %d %d",&n,&m,&x,&y);
for(i=1;i<=m;i++){
fscanf(f,"%d %d %d",&x,&y,&d);
nr[x]++;
nr[y]++;
}
fclose(f);
FILE * s=fopen("sate.in","r");
fscanf(s,"%d %d %d %d",&n,&m,&x,&y);
for(i=0;i<=n;i++)
{ a[i]=new orase[nr[i]+1];
a[i][0].d=0;
}
for(i=1;i<=m;i++){
fscanf(s,"%d %d %d",&z,&j,&d);
l=++a[z][0].d;
a[z][l].o=j;
a[z][l].d=d;
l=++a[j][0].d;
a[j][l].o=z;
a[j][l].d=d;
}
fclose(s);
u=1;p=1; c[0][p]=x; viz[x]=1;
for(i=1;i<=a[x][0].d;i++)
{u++;
c[0][u]=a[x][i].o;
viz[c[0][u]]=1;
c[1][u]=a[x][i].d;
if (c[0][u]==y){
j=u;
u=0;
break;
}
}
p++;
while(p<=u){
for(i=1;i<=a[c[0][p]][0].d;i++)
{ l= a[c[0][p]][i].o;
if(viz[l]==0){
viz[l]=1;
if(l<x&&c[0][p]<l)
{ u++; c[0][u]=l;
c[1][u]=c[1][p]-a[c[0][p]][i].d;
}
else if(c[0][p]<x&&l>x)
{ u++; c[0][u]=l;
c[1][u]=a[c[0][p]][i].d-c[1][p];
}
else if(x<c[0][p]&&c[0][p]<l)
{ u++; c[0][u]=l;
c[1][u]=c[1][p]+a[c[0][p]][i].d;}
else if(l<c[0][p]&&c[0][p]<x)
{ u++; c[0][u]=l;
c[1][u]=c[1][p]+a[c[0][p]][i].d;}
else if(l>x&&c[0][p]>l)
{ u++; c[0][u]=l;
c[1][u]=c[1][p]-a[c[0][p]][i].d;
}
if(c[0][u]==y){
p=u;
break;
}
}
}
p++;
}
if(u==0)u=j;
g=fopen("sate.out","w");
fprintf(g,"%d",c[1][u]);
fclose(g);
return 0;
}