#include <bits/stdc++.h>
#define fi first
#define se second
#define mp make_pair
#define PB push_back
#define EB emplace_back
#define ll long long
#define bit(n,i) ((n>>i)&1)
#define sz(x) (int)x.size()
#define all(x) x.begin(),x.end()
#define TASK "cf"
using namespace std;
struct fenwick{
vector<int>ft;
int lim;
void reset(int _n){
lim=_n+5;
ft.assign(_n+10,0);
}
void upd(int pos,int val){
for(;pos<=lim;pos+=pos&-pos) ft[pos]+=val;
}
int get(int pos){
int res=0;
for (;pos>0;pos-=pos&-pos) res+=ft[pos];
return res;
}
void updating(int l,int r,int val){
upd(l,val);upd(r+1,-val);
}
};
const int LOG=17;
const int maxn=1e5+5;
const int max_edge=2e5+5;
vector<int>adj[maxn];
bool active[max_edge];
int in[maxn],out[maxn],par[maxn][LOG],val[maxn],last[maxn];
int time_dfs;
pair<int,int>edge[max_edge];
int n,m,q;
fenwick ft;
int get_anc(int u){
int origin=u;
for (int i=LOG-1;i>=0;i--) {
if (par[u][i] &&ft.get(in[par[u][i]])==ft.get(in[origin])) u=par[u][i];
}
return u;
}
void dfs(int u,int p){
in[u]=++time_dfs;
for (auto v:adj[u]) {
if (v==p) continue;
par[v][0]=u;
for (int i=1;i<LOG;i++) par[v][i]=par[par[v][i-1]][i-1];
dfs(v,u);
}
out[u]=time_dfs;
}
int main(){
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
// freopen(TASK".inp","r",stdin);
// freopen(TASK".out","w",stdout);
cin>>n>>m>>q;
ft.reset(n);
for (int i=1;i<n;i++){
int u,v; cin>>u>>v;
edge[i].fi=u;edge[i].se=v;
adj[u].PB(v);adj[v].PB(u);
}
dfs(1,-1);
// for (int i=1;i<=n;i++) cout<<in[i]<<" "<<out[i]<<"\n";
for (int i=1;i<=n;i++) {
ft.updating(in[i],out[i],-1);
val[i]=1;
}
get_anc(1);
for (int i=1;i<=m;i++) {
int idx; cin>>idx;
int u=edge[idx].fi,v=edge[idx].se;
if (v==par[u][0]) swap(u,v);
if (active[idx]){
// cout<<get_anc(u)<<" "<<val[get_anc(u)]<<"\n";
val[v]=last[v]=val[get_anc(u)];
ft.updating(in[v],out[v],-1);
}
else {
val[get_anc(u)]+=val[v]-last[v];
ft.updating(in[v],out[v],1);
}
active[idx]=!active[idx];
}
while(q--){
int u; cin>>u;
cout<<val[get_anc(u)]<<"\n";
}
cerr<<"Time running "<<1000*clock()/CLOCKS_PER_SEC<<" ms\n";
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |