Cod sursa(job #637600)

Utilizator klamathixMihai Calancea klamathix Data 20 noiembrie 2011 15:29:43
Problema Portal3 Scor 100
Compilator cpp Status done
Runda .com 2011 Marime 1.14 kb
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;

int i , j , k , n , m , t , x[10] , y[10];
int c1 , c2 , c3;
long long dist[10][10];

inline int manhattan ( int i , int j ) {
	return abs(x[i] - x[j]) + abs(y[i] - y[j]);
}

int main()
{
	freopen("portal3.in","r",stdin);
	freopen("portal3.out","w",stdout);
	
	scanf("%d",&t);
	
	for ( ; t-- ; ) { 
		
		scanf("%d %d",&n,&m);
		
		x[0] = y[0] = 0;
		x[7] = n , y[7] = m;
		
		scanf("%d %d %d %d %d",&x[1],&y[1],&x[2],&y[2],&c1);
		scanf("%d %d %d %d %d",&x[3],&y[3],&x[4],&y[4],&c2);
		scanf("%d %d %d %d %d",&x[5],&y[5],&x[6],&y[6],&c3);
		
		for( i = 0 ; i <= 7 ; ++i )
			for ( j = 0 ; j <= 7 ; ++j )
			dist[i][j] = dist[j][i] = manhattan ( i , j );
		
		dist[1][2] = dist[2][1] = min ( 1LL * c1 , dist[1][2]);
		dist[3][4] = dist[4][3] = min ( 1LL * c2 , dist[3][4]);
		dist[5][6] = dist[6][5] = min ( 1LL * c3 , dist[5][6]);
		
		for ( k = 0 ; k <= 7 ; ++k )
			for ( i = 0 ; i <= 7 ; ++i )
				for ( j = 0 ; j <= 7 ; ++j )
					dist[i][j] = min ( dist[i][j] , dist[i][k] + dist[k][j] );
				
		printf("%lld\n",dist[0][7]);
	}
	
return 0;
}