#include <bits/stdc++.h>
using namespace std;
#pragma GCC target ("avx2")
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")
#define xi first
#define yi second
#define MAX 200007
#define INF 2000
#define SQ 500
#define all(a) a.begin(), a.end()
typedef long long ll;
typedef long double ld;
typedef long long ll;
const ll md = 1e9 + 7;
vector<vector<int>>adj;
vector<int> dep, del, pr;
vector<pair<int, int>>a;
void dfs_1(int node) {
a.push_back({dep[node], node});
for (auto &i : adj[node]) {
dep[i] = dep[node] + 1;
pr[i] = node;
dfs_1(i);
}
}
void dfs_2(int node) {
del[node] = true;
for (auto &i : adj[node]) {
if (del[i]) continue;
dfs_2(i);
}
}
int getMinimumHierarchyHeight(int hierarchy_nodes, vector<int> hierarchy_from, vector<int> hierarchy_to, int max_reassignments) {
int n = hierarchy_nodes;
adj = vector<vector<int>>(n + 1);
pr = dep = del = vector<int> (n + 1);
a = vector<pair<int, int>> (n + 1);
for (auto i = 0; i < hierarchy_from.size(); i++) {
adj[hierarchy_from[i]].emplace_back(hierarchy_to[i]);
}
dfs_1(1);
sort(a.rbegin(), a.rend());
int l = 0, r = a.begin()->first;
while (l + 1 < r) {
int mid = (l + r) / 2;
int need = 0;
fill(del.begin(), del.end(), 0);
for (auto &[d, node]: a) {
if (dep[node] <= mid) break;
int u = node;
int cnt = mid - 1;
while (!del[u] && cnt > 0 && pr[u] != 1) {
u = pr[u];
cnt--;
}
if (!del[u]) {
dfs_2(u);
need++;
}
}
if (need > max_reassignments) l = mid;
else r = mid;
}
return r;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojcHJhZ21hIEdDQyB0YXJnZXQgKCJhdngyIikKI3ByYWdtYSBHQ0Mgb3B0aW1pemF0aW9uICgiTzMiKQojcHJhZ21hIEdDQyBvcHRpbWl6YXRpb24gKCJ1bnJvbGwtbG9vcHMiKQoKI2RlZmluZSB4aSBmaXJzdAojZGVmaW5lIHlpIHNlY29uZAojZGVmaW5lIE1BWCAyMDAwMDcKI2RlZmluZSBJTkYgMjAwMAojZGVmaW5lIFNRIDUwMAojZGVmaW5lIGFsbChhKSBhLmJlZ2luKCksIGEuZW5kKCkKCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIGxvbmcgZG91YmxlIGxkOwp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKY29uc3QgbGwgbWQgPSAxZTkgKyA3Owp2ZWN0b3I8dmVjdG9yPGludD4+YWRqOwp2ZWN0b3I8aW50PiBkZXAsIGRlbCwgcHI7CnZlY3RvcjxwYWlyPGludCwgaW50Pj5hOwp2b2lkIGRmc18xKGludCBub2RlKSB7CiAgICBhLnB1c2hfYmFjayh7ZGVwW25vZGVdLCBub2RlfSk7CiAgICBmb3IgKGF1dG8gJmkgOiBhZGpbbm9kZV0pIHsKICAgICAgICBkZXBbaV0gPSBkZXBbbm9kZV0gKyAxOwogICAgICAgIHByW2ldID0gbm9kZTsKICAgICAgICBkZnNfMShpKTsKICAgIH0KfQp2b2lkIGRmc18yKGludCBub2RlKSB7CiAgICBkZWxbbm9kZV0gPSB0cnVlOwogICAgZm9yIChhdXRvICZpIDogYWRqW25vZGVdKSB7CiAgICAgICAgaWYgKGRlbFtpXSkgY29udGludWU7CiAgICAgICAgZGZzXzIoaSk7CiAgICB9Cn0KaW50IGdldE1pbmltdW1IaWVyYXJjaHlIZWlnaHQoaW50IGhpZXJhcmNoeV9ub2RlcywgdmVjdG9yPGludD4gaGllcmFyY2h5X2Zyb20sIHZlY3RvcjxpbnQ+IGhpZXJhcmNoeV90bywgaW50IG1heF9yZWFzc2lnbm1lbnRzKSB7CiAgICBpbnQgbiA9IGhpZXJhcmNoeV9ub2RlczsKICAgIGFkaiA9IHZlY3Rvcjx2ZWN0b3I8aW50Pj4obiArIDEpOwogICAgcHIgPSBkZXAgPSBkZWwgPSB2ZWN0b3I8aW50PiAobiArIDEpOwogICAgYSA9IHZlY3RvcjxwYWlyPGludCwgaW50Pj4gKG4gKyAxKTsKICAgIGZvciAoYXV0byBpID0gMDsgaSA8IGhpZXJhcmNoeV9mcm9tLnNpemUoKTsgaSsrKSB7CiAgICAgICAgYWRqW2hpZXJhcmNoeV9mcm9tW2ldXS5lbXBsYWNlX2JhY2soaGllcmFyY2h5X3RvW2ldKTsKICAgIH0KICAgIGRmc18xKDEpOwogICAgc29ydChhLnJiZWdpbigpLCBhLnJlbmQoKSk7CiAgICBpbnQgbCA9IDAsIHIgPSBhLmJlZ2luKCktPmZpcnN0OwogICAgd2hpbGUgKGwgKyAxIDwgcikgewogICAgICAgIGludCBtaWQgPSAobCArIHIpIC8gMjsKICAgICAgICBpbnQgbmVlZCA9IDA7CiAgICAgICAgZmlsbChkZWwuYmVnaW4oKSwgZGVsLmVuZCgpLCAwKTsKICAgICAgICBmb3IgKGF1dG8gJltkLCBub2RlXTogYSkgewogICAgICAgICAgICBpZiAoZGVwW25vZGVdIDw9IG1pZCkgYnJlYWs7CiAgICAgICAgICAgIGludCB1ID0gbm9kZTsKICAgICAgICAgICAgaW50IGNudCA9IG1pZCAtIDE7CiAgICAgICAgICAgIHdoaWxlICghZGVsW3VdICYmIGNudCA+IDAgJiYgcHJbdV0gIT0gMSkgewogICAgICAgICAgICAgICAgdSA9IHByW3VdOwogICAgICAgICAgICAgICAgY250LS07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFkZWxbdV0pIHsKICAgICAgICAgICAgICAgIGRmc18yKHUpOwogICAgICAgICAgICAgICAgbmVlZCsrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChuZWVkID4gbWF4X3JlYXNzaWdubWVudHMpIGwgPSBtaWQ7CiAgICAgICAgZWxzZSByID0gbWlkOwogICAgfQogICAgcmV0dXJuIHI7Cn0KaW50IG1haW4oKSB7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwoKICAgIHJldHVybiAwOwp9Cg==