Submission #1288951

#TimeUsernameProblemLanguageResultExecution timeMemory
1288951VicBVicSynchronization (JOI13_synchronization)C++20
0 / 100
46 ms11212 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...