제출 #591856

#제출 시각아이디문제언어결과실행 시간메모리
591856Quan2003Regions (IOI09_regions)C++17
80 / 100
8093 ms36776 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; const int sz=2e5+1; ll timer=1; int n,q,m,k,r; ll st[sz],en[sz]; ll a[sz]; vector<array<ll,2>>to[25001]; ll up[17][sz]; ll par[sz]; vector<ll>adj[sz]; struct compare { bool operator()(const array<ll,2>& value, const int& key) { return (value[0] < key); } bool operator()(const int& key, const array<ll,2>& value) { return (key < value[0]); } }; const int mod=1e9+7; void dfs(int u){ to[a[u]].push_back({timer,u}); st[u]=timer++; for(auto v:adj[u]){ if(v==par[u]) continue; dfs(v); } en[u]=timer-1; } int main(){ cin>>n>>r>>q; cin>>a[1]; for(int i=2;i<=n;i++){ cin>>par[i]>>a[i]; adj[par[i]].push_back(i); } dfs(1); for(int i=0;i<q;i++){ ll u,w,res;cin>>u>>w; const auto &p=to[w];res=0; for(auto v:to[u]){ int x=upper_bound(p.begin(),p.end(),en[v[1]],compare())-lower_bound(p.begin(),p.end(),st[v[1]],compare()); res+=x; } cout<<res<<endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...