Submission #758349

#TimeUsernameProblemLanguageResultExecution timeMemory
758349MetalPowerCat in a tree (BOI17_catinatree)C++14
100 / 100
114 ms21036 KiB
#include <bits/stdc++.h> using namespace std; #define pii pair<int, int> #define fi first #define se second const int MX = 2e5 + 10; const int INF = 1e9 + 7; int N, D, dep[MX]; vector<int> adj[MX]; pii dp[MX]; void dfs_dep(int u){ for(int nxt : adj[u]){ dep[nxt] = dep[u] + 1; dfs_dep(nxt); } } void dfs(int u){ vector<pii> vec; for(int nxt : adj[u]){ dfs(nxt); vec.push_back(dp[nxt]); } sort(vec.begin(), vec.end(), greater<pii>()); int mx = dep[u], mxdep = INF, ans = 0; for(auto x : vec){ if(mx <= x.fi){ ans += x.se, mxdep = min(mxdep, x.fi); mx = max(mx, -x.fi + dep[u] + dep[u] + D); }else{ ans += x.se - 1; } } if(mx <= dep[u]) ans++, mxdep = min(mxdep, dep[u]); dp[u] = {mxdep, ans}; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> N >> D; for(int i = 1; i < N; i++){ int p; cin >> p; adj[p].push_back(i); } dfs_dep(0); dfs(0); cout << dp[0].se << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...