Cod sursa(job #1364144)

Utilizator geniucosOncescu Costin geniucos Data 27 februarie 2015 14:51:18
Problema Sortare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<cstdio>
#include<vector>
#include<algorithm>

using namespace std;

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

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

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

while (pos.size() >= 2)
{
    depth ++;
    int l = pos.size();

    int P[] = {pos[A[l]], pos[B[l]], pos[C[l]]};
    sort (P, P + 3);

    if (P[0] == P[1] || P[1] == P[2])
        sol[P[1]] = l;
    else
    {
        sol[P[0]] = l;
        sol[P[1]] = l - 1;
    }

    vector < int > nou;
    for (int i=1; i<=N; i++)
        if (sol[i] == 0)
            nou.push_back (i);
    pos = nou;
}

if (pos.size())
{
    depth ++;
    sol[pos[0]] = 1;
}
printf ("%d\n", depth);
for (int i=1; i<=N; i++)
    printf ("%d ", sol[i]);
printf ("\n");

return 0;
}