Cod sursa(job #332396)

Utilizator ssergiussSergiu-Ioan Ungur ssergiuss Data 17 iulie 2009 17:48:32
Problema Arbore Scor 0
Compilator cpp Status done
Runda horax_round_1 Marime 1.17 kb
# include <algorithm>
using namespace std;

# define DIM 100001

struct arb {

    int nod;
    arb *urm;
};

int n, m, sum[ DIM ];
arb *lst[ DIM ];

int query ( int s ) {

    int i;

    for ( i = 1; i <= n; ++ i )
        if ( sum[ i ] == s )
            return i;

    return -1;
}

void add ( int x, int y ) {

    arb *p = new arb;

    p->nod = y;
    p->urm = lst[ x ];
    lst[ x ] = p;
}

void update ( int nod, int s ) {

    arb *p;

    sum[ nod ] += s;
    for ( p = lst[ nod ]; p; p = p->urm )
        update ( p->nod, s );
}

void read () {

    int i, p, q, s, tip;

    scanf ( "%d%d", &n, &m );
    for ( i = 1; i < n; ++ i ) {

        scanf ( "%d%d", &p, &q );
        add ( p, q );
    }
    for ( i = 0; i < m; ++ i ) {

        scanf ( "%d", &tip );
        if ( tip == 1 ) {

            scanf ( "%d%d", &p, &s );
            update ( p, s );
        }
        else {

            scanf ( "%d", &s );
            printf ( "%d\n", query ( s ) );
        }
    }
}

int main () {

    freopen ( "arbore.in", "r", stdin );
    freopen ( "arbore.out", "w", stdout );

    read ();

    return 0;
}