Pagini recente » Cod sursa (job #3203034) | Cod sursa (job #1771801) | Cod sursa (job #358333) | Cod sursa (job #11350) | Cod sursa (job #181661)
Cod sursa(job #181661)
#include <stdio.h>
long depth, max, i, n, j, y[5001], x[5001], a[5001], b[5001], c[5001], used[5001];
long egale(long i)
{
if (a[i] == b[i] || b[i] == c[i] || a[i] == c[i])
return 1;
return 0;
}
long min(long a, long b)
{
return a < b ? a : b;
}
void do_(long st, long dr)
{
++depth;
if (st > dr)
{
--depth;
return;
}
max = max < depth ? depth : max;
if (st == dr)
{
--depth;
for (long l = 1; l <= n; ++l)
{
if (!x[l])
{
x[l] = st;
break;
}
}
return;
}
long k = egale(dr - st);
if (k)
{
long pas = 0;
for (long l = 1; l <= n; ++l)
{
if (!x[l])
++pas;
if (pas == b[dr - st])
{
x[l] = st;
break;
}
}
do_(st + 1, dr);
}
else
{
long pas = 0;
for (long l = 1; l <= n; ++l)
{
if (!x[l])
{
++pas;
if (pas == a[dr - st])
x[l] = st;
else
if (pas == b[dr - st])
{
x[l] = st + 1;
break;
}
}
}
do_(st + 2, dr);
}
--depth;
}
void swap(long &a, long &b)
{
long c = a;
a = b;
b = c;
}
int main()
{
freopen ("sortare.in", "rt", stdin);
freopen ("sortare.out", "wt", stdout);
scanf("%ld", &n);
for (i = 1; i < n; ++i)
{
scanf("%ld %ld %ld", &a[i], &b[i], &c[i]);
if (b[i] > c[i])
swap(b[i], c[i]);
if (a[i] > b[i])
swap(a[i], b[i]);
if (b[i] > c[i])
swap(b[i], c[i]);
}
do_(1, n);
printf("%ld\n", max);
j = 1;
for (i = 1; i <= n; ++i)
{
if (x[i])
printf("%ld ", x[i]);
else
{
printf("%ld ", y[j]);
++j;
}
}
printf("\n");
return 0;
}