Submission #1280507

#TimeUsernameProblemLanguageResultExecution timeMemory
1280507hubertmCat in a tree (BOI17_catinatree)C++20
100 / 100
84 ms25396 KiB
#include <bits/stdc++.h> using namespace std; int n, d; vector<int> tree[200001]; int counts[200001]; int distances[200001]; void dfs(int node, int parent) { if (tree[node].size() == 1 && node != 0) { counts[node] = 1; distances[node] = 1; return; } vector<int> children; int sum = 0; for (int child : tree[node]) { if (child == parent) continue; dfs(child, node); children.push_back(distances[child]); sum += counts[child]; } sort(children.begin(), children.end()); int last = 0; for (int i = 0; i < children.size() - 1; ++i) { if (children[i] + children[i + 1] < d) { --sum; last = i + 1; } } bool any = false; for (int v : children) { if (v < d) { any = true; break; } } if (!any) { counts[node] = sum + 1; distances[node] = 1; return; } counts[node] = sum; distances[node] = children[last] + 1; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin >> n >> d; for (int i = 1; i < n; ++i) { int p; cin >> p; tree[p].push_back(i); tree[i].push_back(p); } if (n == 1) { cout << "1\n"; return 0; } dfs(0, -1); cout << counts[0] << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...