932D - Tree

思路:

树上倍增

anc[i][u]:u的2^i祖先

mx[i][u]:u到它的2^i祖先之间的最大值,不包括u

pre[i][u]:以u开始的递增序列的2^i祖先

sum[i][u]:以u开始递增序列从u到2^i祖先的和,不包括u

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))const int N=4e5+5;
const ll INF=1e15;
int anc[20][N],pre[20][N];
ll sum[20][N],w[N],mx[20][N];
int main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int q,cnt=1,op;ll l,r,last=0;w[0]=INF;for(int i=0;i<20;i++)sum[i][1]=sum[i][0]=mx[i][1]=mx[i][0]=INF;cin>>q;while(q--){cin>>op>>l>>r;l^=last;r^=last;if(op==1){anc[0][++cnt]=l;w[cnt]=r;mx[0][cnt]=w[l];for(int i=1;i<20;i++){anc[i][cnt]=anc[i-1][anc[i-1][cnt]];mx[i][cnt]=max(mx[i-1][cnt],mx[i-1][anc[i-1][cnt]]);}int t=cnt;for(int i=19;i>=0;i--){if(mx[i][t]<w[cnt]){t=anc[i][t];}}pre[0][cnt]=anc[0][t];sum[0][cnt]=w[anc[0][t]];for(int i=1;i<20;i++){pre[i][cnt]=pre[i-1][pre[i-1][cnt]];sum[i][cnt]=sum[i-1][cnt]+sum[i-1][pre[i-1][cnt]];}}else{int ans=0;if(w[l]<=r){ans=1;r-=w[l];for(int i=19;i>=0;i--){if(sum[i][l]<=r){r-=sum[i][l];l=pre[i][l];ans+=1<<i;}}}last=ans;cout<<ans<<endl;}}return 0;
}

转载于:https://www.cnblogs.com/widsom/p/8496110.html

Codeforces 932D - Tree相关推荐

  1. CodeForces - 932D Tree(树上倍增,好题)

    题目链接:点击查看 题目大意:给出一棵树,初始时只有一个节点1,权值为0,后续有 n 个操作,每次操作分为两种情况: 1 u val:向树中插入一个新的节点,其父节点为 u ,权值为 val 2 u ...

  2. codeforces 932D Tree 倍增法+二分搜索

    题面叙述 题目给出两种操作: 操作1是将一个权重为W的点加到树的某个节点下. 操作2是询问一个从R开始的序列的最长可能长度. 其中这个序列要这样找:从R开始,沿着祖先方向往上找,凡是权重大于等于当前序 ...

  3. CodeForces 375D Tree and Queries

    传送门:https://codeforces.com/problemset/problem/375/D 题意: 给你一颗有根树,树上每个节点都有其对应的颜色,有m次询问,每次问你以点v为父节点的子树内 ...

  4. Codeforces 911F Tree Destruction

    Tree Destruction 先把直径扣出来, 然后每个点都和直径的其中一端组合, 这样可以保证是最优的. #include<bits/stdc++.h> #define LL lon ...

  5. Codeforces 375D - Tree and Queries(dfs序+莫队)

    题目链接:http://codeforces.com/contest/351/problem/D 题目大意:n个数,col[i]对应第i个数的颜色,并给你他们之间的树形关系(以1为根),有m次询问,每 ...

  6. Codeforces 570D Tree Requests(树上启发式合并)

    题目链接 Tree Requests 1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 #define rep(i, a, b ...

  7. CodeForces - 1363E Tree Shuffling(树上贪心)

    题目链接:点击查看 题目大意:给出一棵有根树,根节点为点 1 ,每个节点都有一个权值 val 和两个属性 b , c ,属性 b 和 c 的权值非 0 即 1 ,现在可以进行的操作是,选择一个节点 x ...

  8. CodeForces - 1328E Tree Queries(dfs序/LCA)

    题目链接:点击查看 题目大意:给出一棵以点 1 为根节点的树,接下来有 m 次询问,每次询问给出 k 个点,题目问我们能否找到一个点 u ,使得从根节点到点 u 的简单路径,到 k 个点的每个点的距离 ...

  9. CodeForces - 375D Tree and Queries(树上启发式合并)

    题目链接:点击查看 题目大意:给出一棵有根树,每个节点都有一个编号代表颜色,现在给出m个询问,每个询问的形式为u k,需要回答以u为根节点的子树中,数量超过k的颜色有多少种 题目分析:树上启发式合并模 ...

最新文章

  1. git 忽略指定文件夹的上传
  2. 09-JS中table模糊查询
  3. [leetcode]Jump Game
  4. 为什么说“人生苦短,我用Python”?为什么Python这么火?
  5. windows下默认以管理员身份运行程序
  6. 通过点击切换文本框内容的脚本示例
  7. 老大,我想获取MySQL插入数据的自增ID,该怎么弄?
  8. 打包 pyqt5_基于Pyqt5的简单电影搜索工具,Python让你3秒搜电影
  9. 快书编标让标书制作更高效、更规范、更轻松
  10. 《逆流而上的你》大结局将至,邹凯高蜜何去何从
  11. 大学生发展规划与就业指导(三)万学网答案
  12. 遗传算法之基因型与表现型的相互转换
  13. python基础:模块的使用——time使用——时间记录器实现
  14. 个人碰到的前端问题总结及解决方法1
  15. 关于加密解密有哪些你需要知道知识?一篇文章告诉你
  16. 计算机自动控制论文,精选:计算机在自动控制技术实践中的应用分析论文原稿...
  17. 词袋模型BoW和词集模型SoW比较
  18. 串口转网络DTU工具软件
  19. BeautfulSoup详解
  20. 安装蓝牙驱动后,桌面出现蓝牙设备图标,并且无法删除

热门文章

  1. linux 配置用户密码,Linux ——用户密码相关设置
  2. git常用命令与常见错误
  3. Moment.js在Vue中使用
  4. 在Eclipse上安装pydev开发工具
  5. 比较两个日期oracle,在oracledb中比较两个日期并不能得到正确的结果
  6. 20200716:最多 K 次交换相邻数位后得到的最小整数(leetcode 1505)
  7. 20190912:(leetcode习题)3的幂
  8. python 输出list到txt_python脚本生成caffe train_list.txt的方法
  9. win10电脑插耳机没声音_Win10如何录制电脑内部声音
  10. SQLServer 2008 r2下载及安装