Pagini recente » Cod sursa (job #172289) | Cod sursa (job #370814) | Cod sursa (job #456721) | Cod sursa (job #1689970) | Cod sursa (job #635744)
Cod sursa(job #635744)
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
long long X[10],Y[10],C[10],dist[10],inQ[10],N,M;
typedef pair<long long, long long> PLL;
vector<PLL> nr[10];
queue<int> Q;
inline long long modul(long long a){
if(a<0)
return -a;
return a;
}
void BF(){
Q.push(0);
inQ[0]=1;
int x;
while(!Q.empty()){
x=Q.front();
Q.pop();
inQ[x]=0;
for(vector<PLL>::iterator it=nr[x].begin();it!=nr[x].end();++it){
if(dist[(*it).first]>dist[x]+(*it).second){
dist[(*it).first]=dist[x]+(*it).second;
if(!inQ[(*it).first]){
inQ[(*it).first]=1;
Q.push((*it).first);
}
}
}
}
}
void solve(){
int i,j;
scanf("%lld%lld",&N,&M);
for(i=1;i<=6;i+=2){
scanf("%lld%lld%lld%lld%lld",&X[i],&Y[i],&X[i+1],&Y[i+1],&C[i]);
nr[i].push_back(PLL(i+1,C[i]));
nr[i+1].push_back(PLL(i,C[i]));
}
X[7]=N;
Y[7]=M;
for(i=1;i<=7;++i)
nr[0].push_back(PLL(i,X[i]+Y[i]));
for(i=0;i<7;++i)
nr[i].push_back(PLL(7,N-X[i]+M-Y[i]));
for(i=1;i<=6;++i){
for(j=1;j<=6;++j){
if((i==1 || i==3 || i==5) && j==i+1)
continue;
nr[i].push_back( PLL(j,modul(X[i]-X[j]) + modul(Y[i]-Y[j])) );
nr[j].push_back( PLL(i,modul(X[i]-X[j]) + modul(Y[i]-Y[j])) );
}
}
for(i=1;i<8;++i)
dist[i]=N*M+1;
BF();
printf("%lld\n",dist[7]);
}
int main(){
freopen("portal3.in","r",stdin);
freopen("portal3.out","w",stdout);
int T;
scanf("%d",&T);
for(;T;--T)
solve();
fclose(stdin);
fclose(stdout);
return 0;
}