#include <bits/stdc++.h>
using namespace std;
//#define TESTS
#define x first
#define y second
#define pii pair<int,int>
#define veci vector<int>
#define vecp vector<pii>
#define all(x) x.begin(), x.end()
#define pb(x,y) x.push_back(y)
const int maxn = 1e5+5;
int n,m,q;
int muc[maxn];
bool active[maxn];
int a[maxn], b[maxn];
int tst[maxn], tdr[maxn];
veci adj[maxn];
int vget(int nod, int i)
{
return a[i]==nod ? b[i] : a[i];
}
int ans=0;
void dfs(int nod,int tata)
{
//cerr<<"HERE "<<nod<<' '<<tata<<' '<<tst[muc[nod]]<<' '<<tdr[muc[tata]]<<'\n';
if(tata!=0&&muc[tata]!=0)
{
if(tst[muc[nod]]>tdr[muc[tata]]) return;
}
ans++;
for(auto e:adj[nod])
{
int next=vget(nod,e);
if(next==tata) continue;
muc[next]=e;
dfs(next,nod);
}
}
void solve()
{
cin>>n>>m>>q;
//assert(q==1);
for(int i=1;i<n;i++)
{
cin>>a[i]>>b[i];
adj[a[i]].push_back(i);
adj[b[i]].push_back(i);
tst[i]=m+1;
tdr[i]=0;
}
for(int i=1;i<=m;i++)
{
int nr; cin>>nr;
if(!active[nr])
{
tst[nr]=min(tst[nr], i);
tdr[nr]=m+100;
active[nr]=1;
}
else
{
tdr[nr]=i;
active[nr]=0;
}
}
/*for(int i=1;i<n;i++)
{
cout<<tst[i]<<','<<tdr[i]<<'\n';
}*/
for(int i=1;i<=q;i++)
{
ans=0;
int root; cin>>root;
muc[root]=0;
dfs(root, 0);
//cerr<<'\n';
cout<<ans<<'\n';
}
}
int main()
{
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(0);
int t=1;
#ifdef TESTS
cin>>t;
#endif
while(t--)
{
solve();
}
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... |