Pagini recente » Cod sursa (job #560976) | Rating Carla Rusu (CookieW101) | Cod sursa (job #41668) | Cod sursa (job #1306514) | Cod sursa (job #3289848)
#include <iostream>
#include <vector>
#include <unordered_set>
#include <unordered_map>
#include <set>
using namespace std;
#define NMAX 100001
int n, q;
vector<int> g[NMAX];
unordered_set<int> suba[NMAX];
unordered_map<int, int> rmoney;
unordered_map<int, set<int>> money;
void dfs(int r, int p){
suba[r].insert(r);
money[0].insert(r);
rmoney[r]=0;
for (auto it:g[r]){
if (it==p)continue;
dfs(it, r);
//if (suba[r].size()<suba[it].size())swap(suba[r], suba[it]);
for (auto iit:suba[it])suba[r].insert(iit);
}
}
void solve(void){
cin>>n>>q;
for (int i=1; i<n; ++i){
int x, y;
cin>>x>>y;
g[x].push_back(y);
g[y].push_back(x);
}
dfs(1, 0);
while (q--){
int op;
cin>>op;
if (op==1){
int p, s;
cin>>p>>s;
for (auto it:suba[p]){
int m=rmoney[it];
money[m].erase(it);
money[m+s].insert(it);
rmoney[it]=m+s;
}
} else {
int s;
cin>>s;
if (money.count(s))cout<<*money[s].begin()<<"\n";
else cout<<"-1\n";
}
}
}
int main(void){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
#ifdef LOCAL
freopen("date.in", "r", stdin);
freopen("log.txt", "w", stdout);
#else
freopen("arbore.in", "r", stdin);
freopen("arbore.out", "w", stdout);
#endif
solve();
return 0;
}