Pagini recente » Cod sursa (job #1493052) | Cod sursa (job #462139) | Cod sursa (job #2434418) | Cod sursa (job #2545973) | Cod sursa (job #163467)
Cod sursa(job #163467)
//infoarena - Preoni 2008 Runda finala Sortare
#include <stdio.h>
#define INPUT "sortare.in"
#define OUTPUT "sortare.out"
#define NMAX 5001
int N;
int A[NMAX], B[NMAX], C[NMAX];
int h;
int *sir(int l)
{
++h;
int *D = new int[l+1];
if(l == 1)
{
D[1] = 1;
return D;
}
if(l == 2)
{
++h;
D[1] = 1; D[2] = 2;
return D;
}
int i;
for(i = 1; i <= l; ++i) D[i] = 0;
int *E;
if(A[l] != B[l] && B[l] != C[l] && A[l] != C[l])
D[B[l]] = l-1,
D[C[l]] = l,
E = sir(l-2);
else
D[B[l]] = l,
E = sir(l-1);
int poz = 0;
for(i = 1; i <= l; ++i)
if(!D[i]) D[i] = E[++poz];
delete[] E;
return D;
}
int main()
{
freopen(INPUT, "r", stdin);
freopen(OUTPUT, "w", stdout);
scanf("%d", &N);
int i;
for(i = 2; i <= N; ++i)
{
int ai, bi, ci;
scanf("%d %d %d", &ai, &bi, &ci);
int aux;
if(bi < ai)
aux = ai, ai = bi, bi = aux;
if(ci < bi)
aux = ci, ci = bi, bi = aux;
if(bi < ai)
aux = ai, ai = bi, bi = aux;
A[i] = ai; B[i] = bi; C[i] = ci;
}
int *D = sir(N);
printf("%d\n", h);
for(i = 1; i < N; ++i)
printf("%d ", D[i]);
printf("%d\n", D[N]);
return 0;
}