hdu4897
来源:互联网 发布:厦门软件企业 编辑:程序博客网 时间:2024/04/30 04:32
题意:
有一棵n个点的树,一开始所有边都是白的。
m个操作:
1、将a,b路径上的边颜色取反
2、将与a,b路径相邻的边颜色取反
3、询问a,b路径上多少条边是黑的
定义e在路径上当e有且仅有一个端点在路径上
n,m<=100000
题解:
突然想起这道题,觉得很妙。拜陈教主orz
相邻似乎根本不可做,题解的做法是:
给每条边存0/1,每个点存0/1,一条边真正的值为边的值异或两端的值。考虑树剖维护。
1、简单线段树操作
2、将a到b的点颜色取反!!!orz
对于路径上的边,两端都被取反相当于不变。对于相邻的边,有一个端点被改变相当于取反。u=lca(a,b)。对于u到父亲的边,a重孩子到a的边,b重孩子到b的边,暴力改一下颜色就好。但这样不是只正确维护了两端在同一重链的边么?对于跨重链的边,我们在询问时暴力查两端的点的颜色计算。由于每次询问最多跨log次重链,所以不会破坏复杂度。
3、还用说么。。
引入点颜色的想法太妙了。。
0 0
- hdu4897
- 【动态树】hdu4897
- hdu4897(树链剖分)
- hdu4897 Little Devil I(树链剖分+线段树)
- 2014多校4,hdu4897,hdu4898,hdu4902,hdu4906题解
- coredata学习总结(八)
- VR学习第四节:VR+直播 VR+电影
- 验证码识别程序
- node js学习(1)
- centos6.5 安装mysql5.7.19
- hdu4897
- 系统Service TelephonyManager
- 通过一个代码简要解析函数的定义与调用
- JZOJ4866【NOIP2016提高A组集训第8场11.5】禅与园林艺术
- 远程自动代答题
- 软件都是用什么语言写的
- javascript遍历节点时打印空白节点怎么办?
- rabbitmq消息队列php实际应用
- 系统服务SmsManager