Pagini recente » Cod sursa (job #1872193) | Cod sursa (job #1117016) | Cod sursa (job #2976277) | Cod sursa (job #3174251) | Cod sursa (job #2551466)
#include <fstream>
#define pinf 1000000007
using namespace std;
ifstream fin ("bibel.in");
ofstream fout ("bibel.out");
int z, n, d[132000][20], b[210][3], niv, nbniv[210], aux, p, ant, dist[132000][20], auxant, rez[210], p2;
int main()
{
int i, j, k, r;
n=0;
niv=0;
while (fin>>z)
{
if (z==0)
{
n++;
fin>>b[n][1]>>b[n][2];
}
else
{
if (z==1)
{
niv++;
nbniv[niv]=n;
}
}
}
for (i=0; i<n; i++)
{
for (j=i+1; j<=n; j++)
{
dist[i][j]=dist[j][i]=(b[j][1]-b[i][1])*(b[j][1]-b[i][1])+(b[j][2]-b[i][2])*(b[j][2]-b[i][2]);
}
}
rez[0]=0;
for (k=1; k<=niv; k++)
{
aux=((1<<(nbniv[k]+1))-1);
for (i=auxant; i<=aux; i++)
{
for (j=0; j<=nbniv[k]; j++)
{
d[i][j]=pinf;
p=1<<j;
if ((p&i)>0)
{
ant=i-p;
if (ant==1)
{
if (dist[0][j]<d[i][j])
d[i][j]=dist[0][j];
}
else
{
for (r=0; r<=nbniv[k]; r++)
{
p2=1<<r;
if ((p2&ant)>0)
{
if (d[ant][r]+dist[r][j]<d[i][j])
{
d[i][j]=d[ant][r]+dist[r][j];
}
}
}
}
}
}
}
rez[k]=pinf;
for (r=0; r<=nbniv[k]; r++)
{
if (rez[auxant]+d[aux][r]<rez[k])
{
rez[k]=rez[auxant]+d[aux][r];
}
}
fout<<rez[k]<<'\n';
auxant=aux;
}
fin.close();
fout.close();
return 0;
}