Cod sursa(job #1236475)

Utilizator enedumitruene dumitru enedumitru Data 1 octombrie 2014 23:17:17
Problema Portal3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<fstream>
#define i64 long long
using namespace std;
ifstream f("portal3.in"); ofstream g("portal3.out");
struct pc {i64 x,y;} p[8];
int t,n,m,i,j,k;
i64 c[8],a[8][8];
i64 modul(i64 x)
{	if(x<0) return -x; else return x;}
i64 dist(pc A, pc B) {return modul(A.x-B.x)+modul(A.y-B.y);}
int main()
{   f>>t;
    while(t--)
    {   f>>n>>m;
		p[0].x=p[0].y=0; p[7].x=n; p[7].y=m;
        for(i=1;i<=5;i+=2) f>>p[i].x>>p[i].y>>p[i+1].x>>p[i+1].y>>c[i];
        for(i=0;i<=7;++i)
			for(j=i;j<=7;++j)
				a[j][i]=a[i][j]=dist(p[i],p[j]);
        if(c[1]<a[1][2]) a[1][2]=a[2][1]=c[1];
        if(c[3]<a[3][4]) a[3][4]=a[4][3]=c[3];
        if(c[5]<a[5][6]) a[5][6]=a[6][5]=c[5];
        for(k=0;k<=7;++k)
			for(i=0;i<=7;++i)
				for(j=0;j<=7;++j)
					if(i!=j&&i!=k&&k!=j&&a[i][j]>a[i][k]+a[k][j]) a[i][j]=a[i][k]+a[k][j];
        g<<a[0][7]<<'\n';
    }
    g.close(); return 0;
}