代码拉取完成,页面将自动刷新
// Time: ctor: O(n * logh)
// get: O(logh)
// Space: O(n * logh)
// binary jump solution (frequently used in competitive programming)
class TreeAncestor {
public:
TreeAncestor(int n, vector<int>& parent) {
vector<int> q;
for (const auto& p : parent) {
parent_.emplace_back(vector<int>(p != -1, p));
if (p != -1) {
q.emplace_back(parent_.size() - 1);
}
}
for (int i = 0; !q.empty(); ++i) {
vector<int> new_q;
for (const auto& curr : q) {
if (!(i < parent_[parent_[curr][i]].size())) {
continue;
}
parent_[curr].emplace_back(parent_[parent_[curr][i]][i]);
new_q.emplace_back(curr);
}
q = move(new_q);
}
}
int getKthAncestor(int node, int k) {
for (; k; k -= k & ~(k - 1)) {
int i = __builtin_ctz(k & ~(k - 1));
if (!(i < parent_[node].size())) {
return -1;
}
node = parent_[node][i];
}
return node;
}
private:
vector<vector<int>> parent_;
};
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。