Pagini recente » Cod sursa (job #1790875) | Cod sursa (job #1066027) | Cod sursa (job #559622) | Cod sursa (job #1056643) | Cod sursa (job #494060)
Cod sursa(job #494060)
#include<stdio.h>
#define URMAT v[0][ v[1][coada[0][prim]] ]
#define LOCURMAT v[1][ v[1][coada[0][prim]] ]
#define MAX 230049
int v[3][MAX],n,m,x,y,cont,coada[2][MAX],prim,ultim;
void add(int x,int y,int d)
{
if(!v[0][x])
{
v[1][x] = cont;
}
else
{
v[1][v[0][x]] = cont;
}
v[0][x] = cont;
v[0][cont] = y;
v[2][cont] = d;
}
int main()
{
FILE*f = fopen("sate.in","r");
fscanf(f,"%d %d %d %d",&n,&m,&x,&y);
int i,j,d,k;
cont = n+1;
for(k=1;k<=n;++k,++cont)
{
fscanf(f,"%d%d%d",&i,&j,&d);
add(i,j,d);
++cont;
add(j,i,d);
}
fclose(f);
prim = 1;
coada[0][prim] = x;
ultim = 2;
int var,min = 999999999;
while(prim!=ultim)
{
while(v[1][coada[0][prim]])
{
if(v[1][ URMAT ])
{
var = URMAT;
coada[0][ultim] = var;
coada[1][ultim] = coada[1][prim];
if(var < coada[0][prim])
coada[1][ultim] -= v[2][ v[1][coada[0][prim]] ];
else coada[1][ultim] += v[2][ v[1][coada[0][prim]] ];
if(var == y && coada[1][ultim] < min)
{
min = coada[1][ultim];
}
++ultim;
}
v[1][coada[0][prim]] = LOCURMAT;
}
++prim;
}
FILE*g = fopen("sate.out","w");
fprintf(g,"%d\n",min);
fclose(g);
return 0;
}