Pagini recente » Cod sursa (job #1416120) | Cod sursa (job #1064344) | Cod sursa (job #55942) | Cod sursa (job #3238587) | Cod sursa (job #180043)
Cod sursa(job #180043)
#include <stdio.h>
long depth, max, i, n, 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;
long k = egale(dr - st);
if (k)
{
long i = st;
while (used[i])
++i;
x[st + min(min(a[dr - st], b[dr - st]), c[dr - st])] = i;
//printf("%ld ", i);
used[i] = 1;
do_(st, i - 1);
do_(i + 1, dr);
}
else
{
long i = st, l = 0;
while (used[i] || !l)
{
if (!used[i])
l = 1;
++i;
}
//printf("%ld ", i);
x[st + min(min(a[dr - st], b[dr - st]), c[dr - st])] = i;
used[i] = 1;
do_(st, i - 1);
do_(i + 1, dr);
}
--depth;
}
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]);
do_(1, n);
printf("%ld\n", max);
for (i = 1; i <= n; ++i)
printf("%ld ", x[i]);
printf("\n");
return 0;
}