Pagini recente » Cod sursa (job #2897222) | Cod sursa (job #1474642) | Cod sursa (job #942475) | Cod sursa (job #592775) | Cod sursa (job #639803)
Cod sursa(job #639803)
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
using namespace std;
typedef long long i64;
inline i64 abs(i64 x){if (x>0) return x;else return -x;}
i64 d[100],u[100],rx[100],ry[100];
struct str{i64 x,y;};
inline str mp(i64 x,i64 y){str aux;aux.x=x;aux.y=y;return aux;}
struct cmp_str{bool operator()(str x,str y){return x.y>y.y;};};
priority_queue <str,vector <str>,cmp_str> q;
vector <str> g[100];
int main()
{
i64 t,n,m,i,j,c;
vector <str>::iterator it;
str aux;
freopen("portal3.in","r",stdin);
freopen("portal3.out","w",stdout);
scanf("%lld",&t);
for (;t;--t)
{
scanf("%lld%lld",&n,&m);
rx[2]=n;
ry[2]=m;
for (i=1;i<=3;++i)
{
scanf("%lld%lld%lld%lld%lld",&rx[2*i+1],&ry[2*i+1],&rx[2*i+2],&ry[2*i+2],&c);
g[2*i+1].push_back(mp(2*i+2,c));
g[2*i+2].push_back(mp(2*i+1,c));
}
for (i=1;i<=8;++i)
for (j=1;j<=8;++j)
{
g[i].push_back(mp(j,abs(rx[i]-rx[j])+abs(ry[i]-ry[j])));
g[i].push_back(mp(j,abs(rx[i]-rx[j])+abs(ry[i]-ry[j])));
}
q.push(mp(1,0));
while (!q.empty()&&q.top().x!=2)
{
aux=q.top();
q.pop();
if (u[aux.x])
continue;
u[aux.x]=1;
for (it=g[aux.x].begin();it!=g[aux.x].end();++it)
if (!u[it->x])
q.push(mp(it->x,(it->y)+aux.y));
}
printf("%lld\n",q.top().y);
memset(u,0,sizeof(u));
while (!q.empty())
q.pop();
for (i=1;i<=8;++i)
g[i].clear();
}
return 0;
}