제출 #1155644

#제출 시각아이디문제언어결과실행 시간메모리
1155644dpsaveslivesCat in a tree (BOI17_catinatree)C++20
100 / 100
35 ms20804 KiB
#include <bits/stdc++.h> using namespace std; int N,D; const int MAXN = 2e5+5; int dp[MAXN],cl[MAXN]; //maximum value, closest picked node vector<int> adj[MAXN]; void dfs(int u, int p){ cl[u] = 0; dp[u] = 1; for(auto v : adj[u]){ if(v != p){ dfs(v,u); dp[u] += dp[v]; if(cl[u]+cl[v]+1 < D){ --dp[u]; cl[u] = max(cl[u],cl[v]+1); } else{ cl[u] = min(cl[u],cl[v]+1); } } } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> N >> D; for(int i = 2;i<=N;++i){ int u; cin >> u; ++u; adj[u].push_back(i); adj[i].push_back(u); } dfs(1,0); cout << dp[1] << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...