题目大意:两种操作:

  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;
}

  

最新文章

  1. (转)RVA-相对虚拟地址解释
  2. CameraFlash手电筒
  3. Entity Framework 第九篇 关于自增列的事务处理
  4. DataTable 怎样设置列宽? DataTable中已经有数据了怎样在现实的时候设置它的列宽?
  5. UVa 10935卡片游戏
  6. 【tcl脚本】改变输出字符格式
  7. wpf datagrid 行双击事件
  8. 【JS】Beginner8:Objects
  9. vagrant拷贝后vagrant file需要加的配置
  10. Android EditeText常用功能盘点
  11. SMT贴片机抛料的成因和回流焊横向温差问题
  12. open和fopen的区别:
  13. 自编Ps教程—我的ps图片赞赏
  14. Python3 Tcp未发送/接收完数据即被RST处理办法
  15. 淘宝可伸缩高性能互联网架构HSF(转)
  16. vue教程3-07 vue-loader
  17. okhttp在https连接中出现java.net.ProtocolException: Expected &#39;:status&#39; header not present的解决办法
  18. Android仿腾讯手机管家实现桌面悬浮窗小火箭发射的动画效果
  19. TypeScript中处理大数字(会丢失后面部分数字)
  20. poj3304 Segments【计算几何】

热门文章

  1. mongodb多个查询语句
  2. 原生js获取页面中所有checkbox
  3. nop 插件解析
  4. SVN中Commit出现乱码的解决方案【转载】
  5. php-5.6.26源代码 - 如何用C语言支持“类似异常”机制
  6. MAC下MySQL初始密码忘记修改初始密码
  7. 牛客暑假多校第一场J-Different Integers
  8. Android 6.0 动态申请 音频+拍照+相册 权限
  9. 20145202马超 《Java程序设计》第六周学习总结
  10. 2,Flask 中的 Render Redirect HttpResponse