Pagini recente » Monitorul de evaluare | Cod sursa (job #2055710) | Cod sursa (job #1454306) | Cod sursa (job #1812183) | Cod sursa (job #1321073)
#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;
}