Pagini recente » Cod sursa (job #1398973) | Cod sursa (job #884421) | Cod sursa (job #60280) | Cod sursa (job #969456) | Cod sursa (job #178724)
Cod sursa(job #178724)
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
#define NMAX 5002
#define pb push_back
#define sz size()
long int a[NMAX][3],pot[NMAX],din[NMAX];
long int aux[NMAX],v[NMAX];
long int n;
void build(long int sh, long int L)
{
long int i,j;
if (L==0) return;
if (L==1) {aux[0]=sh+1;return;}
if (!pot[L]) build(2,L-2);
else build(1,L-1);
memset(v,0,sizeof(v));
if (pot[L])
{
v[ a[L][2] ] = 1;
}
else {v[ a[L][2] ] = 2;v[ a[L][1] ] = 1;}
j=0;
for (i=0;i<L;i++)
if (!v[i]) v[i]=aux[j++];
for (i=0;i<L;i++)
aux[i]=sh+v[i];
}
int main()
{
freopen("sortare.in","r",stdin);
freopen("sortare.out","w",stdout);
long int i,j;
scanf("%ld",&n);
for (i=2;i<=n;i++)
{
scanf("%ld %ld %Ld",&a[i][0],&a[i][1],&a[i][2]);
a[i][0]--;a[i][1]--;a[i][2]--;
if ( (a[i][0]==a[i][1]) || (a[i][1]==a[i][2]) || (a[i][0]==a[i][2]) ) pot[i]=1;
sort(a[i],a[i]+3);
}
din[1]=1;
for (i=2;i<=n;i++)
{
if (pot[i]==1) j=0;
else j=1;
for (;j<i-1;j++)
din[i]=max(din[i], max(din[j], din[i-j-1]) + 1);
}
/* for (i=2;i<=n;i++)
if (pot[i]) din[i]=din[i-1]+1;
else din[i]=din[i-2]+1;*/
printf("%ld\n",din[n]);
build(0,n);
for (i=0;i<n;i++)
printf("%ld ",v[i]);
return 0;
}