#include <bits/stdc++.h>
using namespace std;
#define int int64_t
#define pb push_back
#define fr first
#define sc second
#define all(x) x.begin(),x.end()
#define sp << " " <<
#define N 2000
#define inf (int)1e15
typedef pair<int,int> pii;
vector<int> joi[N+5],ioi[N+5],q[N+5];
int ans[N+5],st[2*N],in[N+5],out[N+5],timer=-1;
void update(int l,int r,int d){
	l+=N;r+=N+1;
	while(l<r){
		if(l&1) st[l++]+=d;
		if(r&1) st[--r]+=d;
		l>>=1;r>>=1;
	}
}
int query(int x){
	x+=N;
	int ans=0;
	while(x){
		ans+=st[x];
		x>>=1;
	}
	return ans;
}
void init(int x){	
	in[x]=++timer;
	for(auto i:ioi[x])	
		init(i);
	out[x]=timer;
}
void calc(int x){
	for(auto i:q[x])
		update(in[i],out[i],1);
	ans[x]=query(in[x]);
	for(auto i:joi[x])	
		calc(i);
	for(auto i:q[x])
		update(in[i],out[i],-1);
}
void solve(){
	int n,m;
	cin >> n >> m;
	int rj,ri;
	for(int i=1;i<=n;i++){
		int pj,pi;
		cin >> pj >> pi;
		if(pj==0) rj=i;
		if(pi==0) ri=i;
		joi[pj].pb(i);
		ioi[pi].pb(i);
	}
	for(int i=0;i<m;i++){
		int x,y;
		cin >> x >> y;
		q[x].pb(y);
	}
	init(ri);
	calc(rj);
	for(int i=1;i<=n;i++)
		cout << ans[i] << endl;
}
int32_t main(){
	//~ freopen("hopscotch.in","r",stdin);
	//~ freopen("hopscotch.out","w",stdout);
	
	cout << fixed << setprecision(0);
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);cout.tie(NULL);
	
	int test=1;
	//~ cin >> test;
	while(test--) solve();
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |