Cod sursa(job #485529)

Utilizator SpiderManSimoiu Robert SpiderMan Data 18 septembrie 2010 17:31:29
Problema Sortare Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
# include <algorithm>
using namespace std ;

# define x first
# define y second

const char FIN[] = "sortare.in", FOU[] = "sortare.out" ;
const int MAX = 5005 ;

pair < int, pair < int, int > > V[MAX] ;
int X[MAX] ;
int N, sol ;

inline void see ( int nmb, int x ) {
    for ( int i = 1; i <= N; ++i ) {
        if ( X[i] == 0 ) {
            if ( --nmb == 0 ) {
                X[i] = x;
                break ;
            }
        }
    }
}

void solve ( void ) {
    for ( int i = N; i ; --i, ++sol ) {
        if ( V[i].x != V[i].y.x && V[i].y.x != V[i].y.y && V[i].y.y != V[i].x ) {
            see ( V[i].x, i - 1 ) ;
            V[i].x < V[i].y.x ? see ( V[i--].y.x - 1, i ) : see ( V[i--].y.x, i ) ;
        } else {
            see ( V[i].y.x == V[i].y.y ? V[i].y.x : V[i].x , i ) ;
        }
    }
}

int main ( void ) {
    freopen ( FIN, "r", stdin ) ;
    freopen ( FOU, "w", stdout ) ;

    scanf ( "%d", &N ) ;
    V[1].x = V[1].y.x = V[1].y.y = 1 ;
    for ( int i = 2; i <= N; ++i ) {
        scanf ( "%d %d %d", &V[i].x, &V[i].y.x, &V[i].y.y ) ;
    }

    solve () ;

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