Pagini recente » Cod sursa (job #2797499) | Cod sursa (job #2046442) | Cod sursa (job #27803) | Cod sursa (job #1867410) | Cod sursa (job #178291)
Cod sursa(job #178291)
#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;
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]) 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;
}