bzoj3306 树
2016-01-22 21:42
274 查看
3306: 树
Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 597 Solved: 185
[Submit][Status][Discuss]
Description
给定一棵大小为 n 的有根点权树,支持以下操作:• 换根
• 修改点权
• 查询子树最小值
Input
第一行两个整数 n, Q ,分别表示树的大小和操作数。接下来n行,每行两个整数f,v,第i+1行的两个数表示点i的父亲和点i的权。保证f < i。如 果f = 0,那么i为根。输入数据保证只有i = 1时,f = 0。
接下来 m 行,为以下格式中的一种:
• V x y表示把点x的权改为y
• E x 表示把有根树的根改为点 x
• Q x 表示查询点 x 的子树最小值
Output
对于每个 Q ,输出子树最小值。Sample Input
3 70 1
1 2
1 3
Q 1
V 1 6
Q 1
V 2 5
Q 1
V 3 4
Q 1
Sample Output
12
3
4
HINT
对于 100% 的数据:n, Q ≤ 10^5。Source
树上单点修改、子树查询,很明显DFS序+线段树。唯一的问题就是换根操作怎么处理?
其实我们不需要改变树的形状,只需要记录当前根是哪个节点。每次询问时判断根和询问节点x的位置关系。
① 如果x是根,则输出整棵树的最小值。
② 如果x是根的祖先,则找到根的子树中最接近x的节点y,输出整棵树减去y的子树的最小值。
③ 如果x既不是根也不是根的祖先,则输出x的子树的最小值。
一开始RE了很多次,因为query中没有判断l>r(其实现在也不是特别懂)。之后又WA了很多次,因为找节点y的倍增算法写错了。
相关文章推荐
- 链表
- 如何提升你的能力?给年轻程序员的几条建议
- 朴素贝叶斯算法
- 构建高并发高可用的电商平台架构实践
- 20150122--接口
- 各种编码简单区别
- web 微信一些接口说明
- Jquery节点遍历
- cf 620C Pearls in a Row(贪心)
- STM32下载不成功问题汇总
- 内联函数学习
- 普惠金融上升到国家战略,创业者与农民的福音?(学习后整理,附XIMD)
- Python操作MySQL数据库
- POJ 2187 Beauty Contest(凸包优化 || 凸包+旋转卡壳)
- 设计基于HTML5的APP登录功能及安全调用接口的方式
- 【SSH】——struts2 拦截器
- 为Java说句公道话
- 面向对象技巧之高内聚,低耦合!!!
- OpenGL es gluLookAt 函数
- C语言 printf函数的返回值