Cod sursa(job #1787984)

Utilizator GeanaVladGeana Vlad GeanaVlad Data 25 octombrie 2016 13:33:07
Problema Arbore Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <iostream>
#include<fstream>
#include<vector>
using namespace std;
ifstream f("arbore.in");
ofstream g("arbore.out");
int n,m,s,i,c[1000010],cst[100010],p,x,y,t;
vector<int>v[100010],z;
void sterge(int x)
{
    int sz=z.size();
    for(int k=0;k<sz;k++)
        if(z[k]==x)
    {
        swap(z[k],z[sz-1]);
        z.pop_back();
    }
}
void DFS(int nod)
{
    c[cst[nod]]=0;
    cst[nod]+=s;
    c[cst[nod]]=nod;
    if(cst[nod])
        sterge(nod);
    int sz=v[nod].size();
    for(int k=0; k<sz; k++)
        DFS(v[nod][k]);
}
int main()
{
    f>>n>>m;
    for(i=1; i<n; i++)
    {
        f>>x>>y;
        v[x].push_back(y);
    }
    for(i=1;i<=n;i++)
        z.push_back(i);
    for(i=1; i<=m; i++)
    {
        f>>t;
        if(t==1)
        {
            f>>p>>s;
            DFS(p);
        }
        else
        {
            f>>s;
            if(s)
            {
                if(c[s])
                    g<<c[s]<<'\n';
                else g<<-1<<'\n';
            }
            else
                g<<z[0]<<'\n';
        }
    }
}