Cod sursa(job #1193008)

Utilizator radu_cebotariRadu Cebotari radu_cebotari Data 30 mai 2014 16:43:31
Problema Arbore Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<fstream>
#include<vector>
using namespace std;
ifstream in("arbore.in");
ofstream out("arbore.out");
int suma[100009];
vector<int> arbore[100009];
vector<int> h[1000009];

void del(int p,int val)
{

    int i;
    for(i = 0 ; i < h[val].size() ; i++)
    if(h[val][i] == p) {h[val].erase(h[val].begin()+i);return;}
}

void adauga(int p,int val)
{

    h[val].push_back(p);
}

void inc(int p,int val){

   if(suma[p] != 0)
        del(p,suma[p]);
    suma[p]+=val;
    adauga(p,suma[p]);
    int i;
    for(i = 0 ; i < arbore[p].size() ; i++)
        inc(arbore[p][i],val);
}

int main()
{

    int n,m;
    in>>n>>m;
    int i,x,y;
    for(i = 1 ; i < n ; i++){

        in>>x>>y;
        arbore[x].push_back(y);
    }

    int cod,p,s;
    for( ; m ; --m){
        in>>cod;
        if(cod == 1){
            in>>p>>s;
            inc(p,s);
        }
        if(cod == 2){
            in>>s;
            if(h[s].empty())
                out<<-1<<"\n";
            else out<<h[s][0]<<"\n";
        }
    }
    return 0;
}