이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
#define all(v) v.begin(), v.end()
#define faster ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define read_input(file) if (fopen(file".inp", "r")) freopen(file".inp", "r", stdin);
#define file(file) freopen (file".inp", "r", stdin); freopen (file".out", "w", stdout);
const int N = 2e5;
int n, k, mx[N + 5], h[N + 5];
vector <int> g[N + 5];
set <pair <int,int>> v[N + 5];
void dfs(int i){
v[i].insert({h[i], i});
for (int j : g[i]){
h[j] = h[i] + 1;
dfs(j);
if (v[i].size() < v[j].size()) swap(v[i], v[j]);
for (pair <int,int> p : v[j]) v[i].insert(p);
}
while (v[i].size() >= 2){
if ((*v[i].begin()).fi + (*next(v[i].begin())).fi - 2 * h[i] < k) v[i].erase(v[i].begin());
else break;
}
}
void solve(){
cin >> n >> k;
for (int i = 1; i < n; ++i){
int p;
cin >> p;
g[p].push_back(i);
}
dfs(0);
cout << v[0].size();
}
signed main(){
faster;
// file("file");
// read_input("file");
int tt = 1;
// cin >> tt;
while (tt--){
solve();
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |