제출 #883335

#제출 시각아이디문제언어결과실행 시간메모리
883335serifefedartarRegions (IOI09_regions)C++17
30 / 100
707 ms18212 KiB
#include <bits/stdc++.h> using namespace std; #define fast ios::sync_with_stdio(0);cin.tie(0); #define s second #define f first typedef long long ll; const ll MOD = 1e9 + 9; const ll LOGN = 21; const ll MAXN = 2e5 + 100; vector<vector<int>> graph; int reg[MAXN], dp[505][505]; vector<int> cnt[MAXN]; void dfs(int node, int parent) { cnt[node][reg[node]]++; for (int reg_other = 1; reg_other <= 500; reg_other++) dp[reg_other][reg[node]] += cnt[node][reg_other]; for (auto u : graph[node]) { swap(cnt[u], cnt[node]); dfs(u, node); } cnt[node][reg[node]]--; swap(cnt[parent], cnt[node]); } int main() { fast int N, R, Q, a, b; cin >> N >> R >> Q; graph = vector<vector<int>>(N+1, vector<int>()); cin >> reg[1]; for (int i = 2; i <= N; i++) { int S; cin >> S >> reg[i]; graph[S].push_back(i); } if (R <= 500) { cnt[1] = vector<int>(505, 0); dfs(1, 1); for (int i = 0; i < Q; i++) { cin >> a >> b; cout << dp[a][b] << endl; } } else { } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...