#include #include #include using namespace std; using namespace atcoder; using mint = modint; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf32 1000000005 #define Inf64 4000000000000000001LL struct lca{ vector depth; vector> parents; int max_j=18; lca(int n,vector> &E){ rep(i,100){ if((1<E.size()){ max_j = i; break; } } depth.assign(E.size(),-1); parents.assign(E.size(),vector(max_j,-1)); stack s; s.push(n); depth[n] = 0; while(s.size()!=0){ int k = s.top(); s.pop(); for(int i=0;i=0;i--){ if(parents[u][i]!=parents[v][i]){ u = parents[u][i]; v = parents[v][i]; } } return parents[u][0]; } int get_distance(int u,int v){ return depth[u]+depth[v]-2*depth[query(u,v)]; } }; int main(){ int n; cin>>n; vector> E(n); rep(i,n-1){ int u,v; cin>>u>>v; u--,v--; E[u].push_back(v); E[v].push_back(u); } lca L(0,E); int q; cin>>q; vector t(q),v(q); rep(i,q){ cin>>t[i]>>v[i]; v[i]--; } int B = 300; for(int i=0;i f(n); for(int j=0;j dis(n,Inf32); queue Q; rep(j,n){ if(ok[j]){ Q.push(j); dis[j] = 0; } } while(Q.size()>0){ int u = Q.front(); Q.pop(); for(int v : E[u]){ if(dis[v] > dis[u] + 1){ dis[v] = dis[u] + 1; Q.push(v); } } } vector checks; rep(j,n){ if(f[j] && !ok[j])checks.push_back(j); } for(int j=i;j