제출 #710779

#제출 시각아이디문제언어결과실행 시간메모리
710779stevancvCat in a tree (BOI17_catinatree)C++14
11 / 100
4 ms5076 KiB
#include <bits/stdc++.h> #define ll long long #define ld long double #define sp ' ' #define en '\n' #define smin(a, b) a = min(a, b) #define smax(a, b) a = max(a, b) using namespace std; const int N = 2e5 + 5; const int inf = 1e9; vector<int> g[N]; int dep[N], mx[N], ans[N], k; int Dfs(int s, int d) { if (g[s].size() == 0 && d >= k) { ans[s] = 1; return 0; } else if (g[s].size() == 0) return inf; for (int u : g[s]) { int nesto = Dfs(u, d + 1); smin(d, nesto + 1); } if (d >= k) { ans[s] = 1; return 0; } return d; } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n; cin >> n >> k; for (int i = 1; i < n; i++) { int p; cin >> p; g[p].push_back(i); dep[i] = dep[p] + 1; } for (int i = n - 1; i >= 0; i--) { mx[i] = dep[i]; sort(g[i].begin(), g[i].end(), [&] (int xx, int yy) { return mx[xx] > mx[yy]; }); for (int j : g[i]) smax(mx[i], mx[j]); } Dfs(0, inf); int sum = 0; for (int i = 0; i < n; i++) sum += ans[i]; cout << sum << en; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...