# include <iostream>
# include <vector>
using namespace std;
const int MAX=2e5+11;
int n,m,q;
vector<pair<int,int>> adj[MAX];
vector<pair<int,int>> alive[MAX];
int ans;
void dfs(int curr, int par, int tm)
{
ans++;
for(pair<int,int>& p: adj[curr])
{
int nxt=p.first,id=p.second;
if(nxt==par) continue;
int bst=m+1;
for(pair<int,int> pa: alive[id])
{
if(pa.first<=tm) bst=min(pa.second,tm);
}
if(bst<=tm) dfs(nxt,curr,bst);
}
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>m>>q;
for(int i=1;i<n;i++)
{
int u,v;
cin>>u>>v;
adj[u].push_back({v,i});
adj[v].push_back({u,i});
}
for(int i=1;i<=m;i++)
{
int x;
cin>>x;
if((int)alive[x].size()>0 and alive[x].back().second==-1) alive[x][alive[x].size()-1].second=i;
else alive[x].push_back({i,-1});
}
for(int i=1;i<n;i++) if((int)alive[i].size()>0 and alive[i].back().second==-1) alive[i][alive[i].size()-1].second=m;
while(q--)
{
int x;
cin>>x;
ans=0;
dfs(x,-1,m);
cout<<ans<<"\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... |