Pagini recente » Cod sursa (job #1109997) | Cod sursa (job #3224078) | Cod sursa (job #381546) | Cod sursa (job #546879) | Cod sursa (job #2552181)
#include <fstream>
#define pinf 1000000007
using namespace std;
ifstream fin ("bibel.in");
ofstream fout ("bibel.out");
int z, n, d[132000][210], b[210][3], niv, aux, p, ant, dist[210][210], mini;
void rez_niv()
{
int i, j, r;
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]);
}
}
aux=((1<<(n+1))-1);
for (i=1; i<=aux; i++)
{
for (j=1; j<=n; j++)
d[i][j]=pinf;
}
for (i=3; i<=aux; i=i+2)
{
for (j=1; j<=n; j++)
{
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=1; r<=n; r++)
{
if (d[ant][r]+dist[r][j]<d[i][j])
{
d[i][j]=d[ant][r]+dist[r][j];
}
}
}
}
}
}
mini=pinf;
for (i=1; i<=n; i++)
{
if (d[aux][i]<mini)
mini=d[aux][i];
}
fout<<mini<<'\n';
}
int main()
{
n=0;
niv=0;
while (fin>>z)
{
if (z==0)
{
n++;
fin>>b[n][1]>>b[n][2];
}
else
{
if (z==1)
{
niv++;
rez_niv();
}
}
}
fin.close();
fout.close();
return 0;
}