Pagini recente » Cod sursa (job #2828699) | Cod sursa (job #3260958) | Cod sursa (job #3149407) | Cod sursa (job #2035439) | Cod sursa (job #638574)
Cod sursa(job #638574)
#include <fstream>
#include <vector>
#include <queue>
#define ll long long
using namespace std;
ifstream fin("portal3.in");
ofstream fout("portal3.out");
const ll INF = 1LL<<62;
vector<pair<int,ll> > G[10];
ll T , x[16] , y[16] , c[4] , C[10];
inline ll abs(ll x)
{
return x > 0 ? x : -x;
}
ll dist(const int x1,const int y1,const int x2,const int y2)
{
return abs(x2-x1) + abs(y2-y1);
}
void bfs()
{
int v;
queue<int> Q;
Q.push(0);
C[0] = 0;
while(!Q.empty())
{
v = Q.front() , Q.pop();
for(vector<pair<int,ll> >::iterator w=G[v].begin();w!=G[v].end();++w)
if(C[(*w).first] > C[v] + (*w).second)
C[(*w).first] = C[v] + (*w).second , Q.push((*w).first);
}
fout<<C[7]<<'\n';
for(int i=0;i<=7;++i)
G[i].clear() , C[i] = INF;
}
int main()
{
for(int i=1;i<=9;++i) C[i] = INF;
fin>>T;
for(;T;T--)
{
fin>>x[7]>>y[7];
fin>>x[1]>>y[1]>>x[2]>>y[2]>>c[1];
G[1].push_back(make_pair(2,c[1]));
G[2].push_back(make_pair(1,c[1]));
fin>>x[3]>>y[3]>>x[4]>>y[4]>>c[2];
G[3].push_back(make_pair(4,c[2]));
G[4].push_back(make_pair(3,c[2]));
fin>>x[5]>>y[5]>>x[6]>>y[6]>>c[3];
G[5].push_back(make_pair(6,c[3]));
G[6].push_back(make_pair(5,c[3]));
for(int i=1;i<=7;++i)
G[0].push_back(make_pair(i,x[i] + y[i])) , G[i].push_back(make_pair(0,x[i] + y[i]));
for(int i=1;i<=7;++i)
for(int j=1;j<=7;++j)
if(i!=j)
G[i].push_back(make_pair(j,dist(x[i],y[i],x[j],y[j])));
bfs();
}
return 0;
}