Pagini recente » Cod sursa (job #462129) | Cod sursa (job #1134872) | Cod sursa (job #102824) | Cod sursa (job #2613568) | Cod sursa (job #1989851)
#include <iostream>
#include <vector>
#include <fstream>
#include <queue>
#include <bitset>
#define MAXN 100010
using namespace std;
ifstream f ("arbore.in");
ofstream t ("arbore.out");
int suma,n,m,s[MAXN];
vector <int> bani[0x10000F],v[MAXN];
void bfs(int nod){
bitset <MAXN> vaz;
queue <int> q;
vaz[nod]=true;
q.push(nod);
while (!q.empty()){
int current=q.front();
s[current]+=suma;
bani[s[current]].push_back(current);
q.pop();
for (auto i:v[current])
if (!vaz[i])
q.push(i),
vaz[i]=true;
}
}
int query(int val){
vector <int>::iterator it=bani[val].begin();
while (s[*it]!=val and it!=bani[val].end())
++it;
if (it!=bani[val].end())
return *it;
else
return -1;
}
int main()
{
f>>n>>m;
for (int a,b,i=1;i<n;++i)
f>>a>>b,
v[a].push_back(b);
for (int type,a,i=0;i<m;++i){
f>>type;
if (type==1)
f>>a>>suma,
bfs(a);
else
f>>a,
t<<query(a)<<'\n';
}
return 0;
}