Cod sursa(job #1321073)

Utilizator bogdanboboc97Bogdan Boboc bogdanboboc97 Data 18 ianuarie 2015 19:18:32
Problema Arbore Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("arbore.in");
ofstream out("arbore.out");
vector< vector<int> > a;
vector<bool> v;
set< pair<int,int> > s;
int ok;
void dfs(int x)
{
    if(v[x]==false)
        ok=x;
    if(ok)return;
    for(auto i: a[x])
        dfs(i);
}
int main()
{
    int n,q,x,y,k;
    in>>n>>q;
    v=vector<bool>(n+1);
    a=vector< vector<int> >(n+1);
    for(int i=1;i<n;i++)
    {
        in>>x>>y;
        a[y].push_back(x);
    }
    for(;q;q--)
    {
        in>>k;
        if(k==1)
        {
            in>>x>>y;
            ok=0;
            dfs(x);
            v[ok]=true;
            s.insert({y,ok});
        }
        else{
            in>>x;
            auto t=s.upper_bound({x,0});
            if(t->first==x)out<<t->second<<'\n';
            else out<<-1<<'\n';
        }
    }
    return 0;
}