Pagini recente » Cod sursa (job #3356473) | Cod sursa (job #304867) | Cod sursa (job #429172) | Cod sursa (job #1990813) | Cod sursa (job #3316583)
#include <bits/stdc++.h>
#define NMAX 100005
#define mod 666013
#define ll long long
std::ifstream f("arbore.in");
std::ofstream g("arbore.out");
using namespace std;
struct ceva{
bool ok;
int x;
};
int n, q, t;
vector<int> muchii[NMAX];
unordered_map<int, int> fr;
int pret[NMAX], parinte[NMAX];
ceva vizitat[NMAX];
bool ramai=0;
void dfs(int nod, int adun, int prev){
pret[nod]+=adun;
for(auto x:muchii[nod]){
if(vizitat[x].ok==0 || (vizitat[x].ok==1 && vizitat[x].x!=t)){
if(x!=prev && x!=-1){
vizitat[x]={1, t};
dfs(x, adun, prev);
}
}
}
}
void dfs1(int nod, int p){
if(ramai==1) return;
if(pret[nod]==p){
g << nod << '\n';
ramai=1;
return;
}
for(auto x:muchii[nod]){
if(vizitat[x].ok==0 || (vizitat[x].ok==1 && vizitat[x].x!=t)){
vizitat[x]={1, t};
dfs1(x, p);
}
}
}
void update(){
int x, y;
f >> x >> y;
vizitat[x]={1, t};
dfs(x, y, parinte[x]);
}
void solve(){
int x;
f >> x;
ramai=0;
dfs1(1, x);
if(ramai==0) g << -1 << '\n';
}
int main(){
f >> n >> q;
fr[0]=n;
parinte[1]=-1;
for(int i=1;i<n;i++){
int x, y;
f >> x >> y;
muchii[x].push_back(y);
muchii[y].push_back(x);
parinte[y]=x;
}
for(int i=1;i<=q;i++){
int cer;
f >> cer;
t=i;
(cer==1)?update():solve();
}
}