Pagini recente » Cod sursa (job #752193) | Cod sursa (job #1519903) | Cod sursa (job #2927423) | Cod sursa (job #160457) | Cod sursa (job #635311)
Cod sursa(job #635311)
#include <cstdio>
#include <cstring>
using namespace std;
FILE* fin = fopen("portal3.in", "r");
FILE* fout = fopen("portal3.out", "w");
typedef long long int64;
#define INF 0x3f3f3f3f
struct point {
int64 x, y;
};
inline int64 abs(int64 a)
{
return a < 0 ? -a : a;
}
inline int64 min(int64 a, int64 b)
{
return a < b ? a : b;
}
inline int64 dist(point a, point b)
{
return abs(a.x - b.x) + abs(a.y - b.y);
}
void doTest()
{
int64 n, m;
fscanf(fin, "%lld %lld\n", &n, &m);
point pt[10];
int64 c[10][10];
int64 d[10][10];
memset(pt, 0, sizeof(pt));
memset(d, 0, sizeof(d));
memset(c, 0x3f, sizeof(c));
for (int i = 0; i < 3; ++i) {
int a = (i << 1) + 1, b = (i << 1) + 2;
fscanf (fin, "%lld %lld %lld %lld %lld\n", &pt[a].x, &pt[a].y, &pt[b].x, &pt[b].y, &c[a][b]);
c[b][a] = c[a][b];
}
pt[0].x = 0, pt[0].y = 0;
pt[7].x = n, pt[7].y = m;
for (int i = 0; i < 8; ++i) {
for (int j = 0; j < 8; ++j) {
d[i][j] = dist(pt[i], pt[j]);
d[i][j] = min(d[i][j], c[i][j]);
if (d[i][j] == 0) {
d[i][j] = INF;
}
}
}
for (int k = 0; k < 8; ++k) {
for (int i = 0; i < 8; ++i) {
for (int j = 0; j < 8; ++j) {
d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
}
}
}
fprintf (fout, "%lld\n", d[0][7]);
}
int main()
{
int t;
fscanf (fin, "%d\n", &t);
for (int i = 0; i < t; ++i) {
doTest();
}
fclose(fin);
fclose(fout);
return 0;
}