题目大意:两种操作:

  1. $1\;u\;w:$把下一个点挂在$u$下,权值为$w$。
  2. $2\;u\;w:$询问从$u$开始的序列的最长长度。序列为从$u$开始的祖先序列中的不严格上升序列

题解:可以把一个点的父亲设为它祖先中第一个比它大的,倍增即可

卡点:跳父亲语句写在更新答案之前,然后锅锅

C++ Code:

#include <cstdio>
#define maxn 400010
#define N 20
int cnt = 1, n, fa[N][maxn];
long long sum[N][maxn], w[maxn], pw[maxn];
long long last;
int main() {
scanf("%d", &n);
pw[0] = 1; for (int i = 1; i < N; i++) pw[i] = pw[i - 1] << 1;
for (int i = 1; i <= n; i++) {
int op; long long u, W;
scanf("%d%lld%lld", &op, &u, &W);
u ^= last, W ^= last;
if (op == 1) {
w[++cnt] = W;
int now = u;
if (W > w[u]) {
for (int j = N - 1; ~j; j--) if (fa[j][now] && W > w[fa[j][now]]) now = fa[j][now];
now = fa[0][now];
}
fa[0][cnt] = now;
sum[0][cnt] = w[now];
for (int j = 1; j < N; j++) {
sum[j][cnt] = sum[j - 1][cnt] + sum[j - 1][fa[j - 1][cnt]];
fa[j][cnt] = fa[j - 1][fa[j - 1][cnt]];
}
} else {
last = 0;
if (w[u] > W) {
puts("0");
continue;
}
long long S = w[u];
for (int j = N - 1; ~j; j--) if (fa[j][u] && S + sum[j][u] <= W) {
S += sum[j][u];
u = fa[j][u];
last += pw[j];
}
printf("%lld\n", last += 1);
}
}
return 0;
}

  

[CF932D]Tree的更多相关文章

  1. [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法

    二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...

  2. SAP CRM 树视图(TREE VIEW)

    树视图可以用于表示数据的层次. 例如:SAP CRM中的组织结构数据可以表示为树视图. 在SAP CRM Web UI的术语当中,没有像表视图(table view)或者表单视图(form view) ...

  3. 无限分级和tree结构数据增删改【提供Demo下载】

    无限分级 很多时候我们不确定等级关系的层级,这个时候就需要用到无限分级了. 说到无限分级,又要扯到递归调用了.(据说频繁递归是很耗性能的),在此我们需要先设计好表机构,用来存储无限分级的数据.当然,以 ...

  4. 2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...

  5. Leetcode 笔记 110 - Balanced Binary Tree

    题目链接:Balanced Binary Tree | LeetCode OJ Given a binary tree, determine if it is height-balanced. For ...

  6. Leetcode 笔记 100 - Same Tree

    题目链接:Same Tree | LeetCode OJ Given two binary trees, write a function to check if they are equal or ...

  7. Leetcode 笔记 99 - Recover Binary Search Tree

    题目链接:Recover Binary Search Tree | LeetCode OJ Two elements of a binary search tree (BST) are swapped ...

  8. Leetcode 笔记 98 - Validate Binary Search Tree

    题目链接:Validate Binary Search Tree | LeetCode OJ Given a binary tree, determine if it is a valid binar ...

  9. Leetcode 笔记 101 - Symmetric Tree

    题目链接:Symmetric Tree | LeetCode OJ Given a binary tree, check whether it is a mirror of itself (ie, s ...

随机推荐

  1. C++二维数组动态申请内存

    好久没用C++刷题了,今天早上刷了几条题,感觉很陌生了.怪我,大二下实在太颓废了,没啥作为. 今天更新个关于c++二维数组内存申请的问题,当初作为菜鸟初学指针的时候,还是在这方面有点搞不通的.今天用到 ...

  2. LeetCode962. 最大宽度坡

    问题:最大宽度坡 给定一个整数数组 A,坡是元组 (i, j),其中  i < j 且 A[i] <= A[j].这样的坡的宽度为 j - i. 找出 A 中的坡的最大宽度,如果不存在,返 ...

  3. 复用传统C/S架构系统,升级成‘伪’B/S架构设计

    应用场景:已经部署了传统系统又想要移动方式的场景.安全性考虑要求高的场景(核心资源要求在企业内部的场景). 我们 做了如下的系统设计: 核心是我们利用了WS做了内外穿透的设计.

  4. 原生js获取页面中所有checkbox

    var inputs = document.getElementsByTagName("input");//获取所有的input标签对象 var checkboxArray = [ ...

  5. JQuery制作网页—— 第三章 JavaScript操作DOM对象

    1. DOM:Document Object Model(文档对象模型):          DOM操作:                   ●DOM是Document Object Model的缩 ...

  6. 数据结构学习-AVL平衡树

    环境:C++ 11 + win10 IDE:Clion 2018.3 AVL平衡树是在BST二叉查找树的基础上添加了平衡机制. 我们把平衡的BST认为是任一节点的左子树和右子树的高度差为-1,0,1中 ...

  7. 裸机——RTC

    1. 首先晓得RTC的基本知识 RTC被划分到timer,但RTC是面向时间点的. 如果按照定时器的思路去思考,那么应该考虑 时间周期 和 计数值. RTC 不是面向时间点的,所以略有不同, 时间周期 ...

  8. 初见spark-03(高级算子)

    最近心情不是很好,但是需要调节自己,真的需要调节自己,还是要努力,这个世界有我喜欢的人,有我追求的人,也许真的是守的住寂寞,耐得住繁华吧. 不说别的了,今天我们来接受啊spark的高级算子的系列 1. ...

  9. protobuf-2.5.0的下载与安装

    1.下载 Hadoop使用protocol buffer进行通信,需要下载和安装protobuf-2.5.0.tar.gz.由于现在protobuf-2.5.0.tar.gz已经无法在官网https: ...

  10. 理解线程3 c语言示例线程基本操作

    Table of Contents 1. 基本线程的动作 1.1. 设置线程属性 1.1.1. 设置脱离状态 1.1.2. 设置调度属性 1.2. 取消线程 1.3. 主线程创建多个线程示例 2. 了 ...