Pagini recente » Cod sursa (job #309156) | Cod sursa (job #598609) | Cod sursa (job #2319365) | Cod sursa (job #2771735) | Cod sursa (job #635779)
Cod sursa(job #635779)
#include<cstdio>
#include<fstream>
#include<vector>
using namespace std;
ifstream f("portal3.in");
ofstream g("portal3.out");
long long X[10],Y[10],C[10],dist[10],inQ[10],N,M;
typedef pair<int, long long> PLL;
vector<PLL> nr[10];
int Q[1000];
inline long long modul(long long a){
if(a<0)
return -a;
return a;
}
void BF(){
Q[0]=0;
inQ[0]=1;
int x,i,dim,p=0,u=0;
while(p<=u){
x=Q[p];
++p;
inQ[x]=0;
dim=(int)nr[x].size();
for(i=0;i<dim;++i){
if(dist[nr[x][i].first]>dist[x]+nr[x][i].second){
dist[nr[x][i].first]=dist[x]+nr[x][i].second;
if(!inQ[nr[x][i].first]){
inQ[nr[x][i].first]=1;
Q[++u]=nr[x][i].first;
}
}
}
}
}
void solve(){
int i,j;
//scanf("%lld%lld",&N,&M);
f>>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]);
f>>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();
for(i=0;i<8;++i)
nr[i].clear();
//printf("%lld\n",dist[7]);
g<<dist[7]<<'\n';
}
int main(){
//freopen("portal3.in","r",stdin);
//freopen("portal3.out","w",stdout);
int T;
//scanf("%d",&T);
f>>T;
for(;T;--T)
solve();
fclose(stdin);
fclose(stdout);
return 0;
}