Pagini recente » Cod sursa (job #3246696) | Cod sursa (job #588018) | Cod sursa (job #2122320) | Cod sursa (job #2475523) | Cod sursa (job #680579)
Cod sursa(job #680579)
#include <iostream>
#include <fstream>
#include <string.h>
#define i64 long long
using namespace std;
i64 C[10][10];
i64 RF()
{
int i, j, k;
for(k = 0; k <= 7; k++)
for(i = 0; i <= 7; i++)
for(j = 0; j <= 7; j++)
if(C[i][k] && C[k][j] && (C[i][j] >= C[i][k] + C[k][j] || !C[i][j]) && i!=j)
C[i][j] = C[i][k] + C[k][j];
return C[0][7];
}
inline i64 abs(i64 x)
{
if(x < 0)
return -x;
return x;
}
inline i64 min(i64 a, i64 b)
{
if( a < b)
return a;
return b;
}
i64 P[10][10];
int main()
{
ifstream in ("portal3.in");
ofstream out("portal3.out");
i64 T, N, M, X1, X2, Y1, Y2, C1, i, j;
in >> T;
while(T--)
{
in >> N >> M;
for(i = 0; i < 3; i++)
{
in >> X1 >> Y1 >> X2 >> Y2 >> C1;
C[1 + 2 * i][0] = C[0][1 + 2 * i] = X1 + Y1;
C[2 + 2 * i][0] = C[0][2 + 2 * i] = X2 + Y2;
C[2 * i + 2][2 * i + 1] = C[2 * i + 1][2* i + 2] = min(abs(X2 - X1) + abs(Y2 - Y1), C1);
C[7][2 * i + 1] = C[1 + 2 * i][7] = N - X1 + M - Y1;
C[7][2 * i + 2] = C[2 * i + 2][7] = N + M - X2 - Y2;
P[2 * i + 1][1] = X1;
P[2 * i + 1][2] = Y1;
P[2 * i + 2][1] = X2;
P[2 * i + 2][2] = Y2;
for(j = 2 * i; j > 0; j--)
{
C[j][2 * i + 1] = C[2 * i + 1][j] = abs(P[j][1] - X1) + abs(P[j][2] - Y1);
C[j][2 * i + 2] = C[2 * i + 2][j] = abs(P[j][1] - X2) + abs(P[j][2] - Y2);
}
}
C[0][7] = C[7][0] = N + M;
out << RF() << '\n';
}
return 0;
}