Codeforces 932D - Tree
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相关推荐
- CodeForces - 932D Tree(树上倍增,好题)
题目链接:点击查看 题目大意:给出一棵树,初始时只有一个节点1,权值为0,后续有 n 个操作,每次操作分为两种情况: 1 u val:向树中插入一个新的节点,其父节点为 u ,权值为 val 2 u ...
- codeforces 932D Tree 倍增法+二分搜索
题面叙述 题目给出两种操作: 操作1是将一个权重为W的点加到树的某个节点下. 操作2是询问一个从R开始的序列的最长可能长度. 其中这个序列要这样找:从R开始,沿着祖先方向往上找,凡是权重大于等于当前序 ...
- CodeForces 375D Tree and Queries
传送门:https://codeforces.com/problemset/problem/375/D 题意: 给你一颗有根树,树上每个节点都有其对应的颜色,有m次询问,每次问你以点v为父节点的子树内 ...
- Codeforces 911F Tree Destruction
Tree Destruction 先把直径扣出来, 然后每个点都和直径的其中一端组合, 这样可以保证是最优的. #include<bits/stdc++.h> #define LL lon ...
- Codeforces 375D - Tree and Queries(dfs序+莫队)
题目链接:http://codeforces.com/contest/351/problem/D 题目大意:n个数,col[i]对应第i个数的颜色,并给你他们之间的树形关系(以1为根),有m次询问,每 ...
- Codeforces 570D Tree Requests(树上启发式合并)
题目链接 Tree Requests 1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 #define rep(i, a, b ...
- CodeForces - 1363E Tree Shuffling(树上贪心)
题目链接:点击查看 题目大意:给出一棵有根树,根节点为点 1 ,每个节点都有一个权值 val 和两个属性 b , c ,属性 b 和 c 的权值非 0 即 1 ,现在可以进行的操作是,选择一个节点 x ...
- CodeForces - 1328E Tree Queries(dfs序/LCA)
题目链接:点击查看 题目大意:给出一棵以点 1 为根节点的树,接下来有 m 次询问,每次询问给出 k 个点,题目问我们能否找到一个点 u ,使得从根节点到点 u 的简单路径,到 k 个点的每个点的距离 ...
- CodeForces - 375D Tree and Queries(树上启发式合并)
题目链接:点击查看 题目大意:给出一棵有根树,每个节点都有一个编号代表颜色,现在给出m个询问,每个询问的形式为u k,需要回答以u为根节点的子树中,数量超过k的颜色有多少种 题目分析:树上启发式合并模 ...
最新文章
- git 忽略指定文件夹的上传
- 09-JS中table模糊查询
- [leetcode]Jump Game
- 为什么说“人生苦短,我用Python”?为什么Python这么火?
- windows下默认以管理员身份运行程序
- 通过点击切换文本框内容的脚本示例
- 老大,我想获取MySQL插入数据的自增ID,该怎么弄?
- 打包 pyqt5_基于Pyqt5的简单电影搜索工具,Python让你3秒搜电影
- 快书编标让标书制作更高效、更规范、更轻松
- 《逆流而上的你》大结局将至,邹凯高蜜何去何从
- 大学生发展规划与就业指导(三)万学网答案
- 遗传算法之基因型与表现型的相互转换
- python基础:模块的使用——time使用——时间记录器实现
- 个人碰到的前端问题总结及解决方法1
- 关于加密解密有哪些你需要知道知识?一篇文章告诉你
- 计算机自动控制论文,精选:计算机在自动控制技术实践中的应用分析论文原稿...
- 词袋模型BoW和词集模型SoW比较
- 串口转网络DTU工具软件
- BeautfulSoup详解
- 安装蓝牙驱动后,桌面出现蓝牙设备图标,并且无法删除
热门文章
- linux 配置用户密码,Linux ——用户密码相关设置
- git常用命令与常见错误
- Moment.js在Vue中使用
- 在Eclipse上安装pydev开发工具
- 比较两个日期oracle,在oracledb中比较两个日期并不能得到正确的结果
- 20200716:最多 K 次交换相邻数位后得到的最小整数(leetcode 1505)
- 20190912:(leetcode习题)3的幂
- python 输出list到txt_python脚本生成caffe train_list.txt的方法
- win10电脑插耳机没声音_Win10如何录制电脑内部声音
- SQLServer 2008 r2下载及安装