Cod sursa(job #1364138)

Utilizator geniucosOncescu Costin geniucos Data 27 februarie 2015 14:45:06
Problema Sortare Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include<cstdio>

using namespace std;

int N, depth, A[5009], B[5009], C[5009], sol[5009], pos[5009];

void solve (int l, int v_max)
{
    if (l <= 1)
    {
        depth ++;
        for (int i=1; i<=N; i++)
            if (pos[i])
                sol[i] = v_max;
        return ;
    }
    depth ++;

    int P = 0, pa, pb, pc;
    for (int j=1; j<=N; j++)
        if (pos[j])
        {
            P ++;

            if (P == A[l])
                pa = j;

            if (P == B[l])
                pb = j;

            if (P == C[l])
                pc = j;
        }

    if (pa == pb || pb == pc)
    {
        sol[pb] = v_max;
        pos[pb] = 0;
        solve (l - 1, v_max - 1);
    }

    if (pa == pc)
    {
        sol[pa] = v_max;
        pos[pa] = 0;
        solve (l - 1, v_max - 1);
    }

    sol[pb] = v_max - 1;
    sol[pa] = v_max;
    pos[pb] = pos[pa] = 0;

    solve (l - 2, v_max - 2);
}

int main()
{
freopen ("sortare.in", "r", stdin);
freopen ("sortare.out", "w", stdout);

scanf ("%d", &N), pos[1] = 1;
for (int i=2; i<=N; i++)
    scanf ("%d %d %d", &A[i], &B[i], &C[i]), pos[i] = 1;

solve (N, N);

printf ("%d\n", depth);
for (int i=1; i<=N; i++)
    printf ("%d ", sol[i]);
printf ("\n");

return 0;
}