제출 #1346387

#제출 시각아이디문제언어결과실행 시간메모리
1346387tte0Regions (IOI09_regions)C++20
40 / 100
418 ms196608 KiB
// Author: Teoman Ata Korkmaz
#include <bits/stdc++.h> 
#define int int32_t
using namespace std;
constexpr int N=2e5+5;
constexpr int R=25000;
///////////////////////////////////////////////////////////
int n,m,q,p[N],c[N];
vector<vector<int>> ans;
vector<int> adj[N];
map<int,int> mp[N];

inline void dfs(int node){
	// cerr<<"begin "<<node<<endl;
	for(const auto i:adj[node]){
		dfs(i);
		if(mp[node].size()<mp[i].size())swap(mp[node],mp[i]);
		for(const auto [k,v]:mp[i])mp[node][k]+=v;
	}
	for(const auto [k,v]:mp[node])ans[c[node]][k]+=v;
	mp[node][c[node]]++;

	// cerr<<"end "<<node<<endl;
	// for(int i=0;i<m;i++){
	// 	for(int j=0;j<m;j++){
	// 		cerr<<ans[i][j]<<" ";
	// 	}
	// 	cerr<<endl;
	// }
	// cerr<<"end "<<node<<endl;
}

signed main(void){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

    cin>>n>>m>>q>>c[0];c[0]--;
	for(int i=1;i<n;i++){
		int x,y;
		cin>>x>>y;
		x--,y--;
		p[i]=x;
		c[i]=y;
		adj[x].push_back(i);
	}

	ans.resize(m,vector<int>(m,0));

	dfs(0);

	// for(int i=0;i<m;i++){
	// 	for(int j=0;j<m;j++){
	// 		cerr<<ans[i][j]<<" ";
	// 	}
	// 	cerr<<endl;
	// }

	while(q--){
		int x,y;
		cin>>x>>y;
		x--,y--;
		cout<<ans[x][y]<<'\n'<<flush;
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...