Pagini recente » Cod sursa (job #1106937) | Cod sursa (job #778031) | Cod sursa (job #1905744) | Cod sursa (job #383374) | Cod sursa (job #163625)
Cod sursa(job #163625)
#include <stdio.h>
#include <algorithm>
using namespace std;
const int n_max = 5009;
int p[n_max][4],
s[8],
sol[n_max],
r[2][n_max];
int i, n, hmax, k, pre, j, c;
int main()
{
freopen("sortare.in","r",stdin);
freopen("sortare.out","w",stdout);
scanf("%d", &n);
for (i = 2; i <= n; ++ i)
{
scanf("%d %d %d", &s[1], &s[2], &s[3]);
sort(s+1, s+4);
if (s[1] == s[2] && s[2] == s[3])
{
p[i][0] = 1;
p[i][1] = s[1];
}
else
if (s[1] == s[2])
{
p[i][0] = 2;
p[i][1] = s[1];
p[i][2] = s[3];
}
else
if (s[2] == s[3])
{
p[i][0] = 2;
p[i][1] = s[2];
p[i][2] = s[1];
}
else
{
p[i][0] = 3;
p[i][1] = s[1];
p[i][2] = s[2];
p[i][3] = s[3];
}
}
k = n;
while (k > 1)
{
++hmax;
if (p[k][0] == 1)
{
sol[++sol[0]] = 1;
k-=1;
}
else
{
sol[++sol[0]] = p[k][0]-1;
k-=p[k][0]-1;
}
}
printf("%d\n", hmax+1);
// Reconstituirea
if (k == 1)
{
r[0][1] = 1;
}
c = 1;
pre = 1-c;
for (i = 1; i <= sol[0]; ++ i)
{
k+=sol[i];
memset(r[c], 0, sizeof(r[c]));
for (j = 1; j <= p[k][0]-1; ++ j)
{
r[c][p[k][j]] = k-j+1;
}
int o = 0;
for (j = 1; j <= k; ++ j)
if (r[c][j] == 0)
{
r[c][j] = r[pre][++o];
}
pre = c;
c = 1-c;
}
for (i = 1; i <=n; ++ i)
printf("%d ", r[pre][i]);
printf("\n");
return 0;
}