Pagini recente » Cod sursa (job #2707141) | Cod sursa (job #2782293) | Cod sursa (job #830294) | Cod sursa (job #2907685) | Cod sursa (job #641510)
Cod sursa(job #641510)
#include <cstdio>
int abs(int x)
{return (x<0)?-x:x;}
int main()
{
int t,n,m,x[7],y[7],c[4],i,j,dist[7];
freopen("portal3.in","r",stdin);
freopen("portal3.out","w",stdout);
scanf("%d",&t);
while (t--)
{
scanf("%d %d",&n,&m);
for (i=0;i<3;++i)
{
scanf("%d %d %d %d %d",&x[i*2],&y[i*2],&x[i*2+1],&y[i*2+1],&c[i]);
dist[i*2]=x[i*2]+y[i*2]; dist[i*2+1]=x[i*2+1]+y[i*2+1];
if (dist[i*2]+c[i]<dist[i*2+1])
dist[i*2+1]=dist[i*2]+c[i]; else
if (dist[i*2+1]+c[i]<dist[i*2])
dist[i*2]=dist[i*2+1]+c[i];
}
x[6]=n;y[6]=m;dist[6]=n+m;
for (i=0;i<6;++i)
for (j=i+1;j<7;++j)
{if ((i/2!=j/2) && (dist[i]+abs(x[i]-x[j])+abs(y[i]-y[j])<dist[j]))
dist[j]=dist[i]+abs(x[i]-x[j])+abs(y[i]-y[j]);
if ((j%2==0) && (dist[j]+c[j/2]<dist[j+1]))
dist[j+1]=dist[j]+c[j/2]; else
if ((j%2==1) && (dist[j]+c[j/2]<dist[j-1]))
dist[j-1]=dist[j]+c[j/2];
}
printf("%d\n",dist[6]);
}
return 0;
}