本文主要是介绍hdu 4897 Little Devil I(树链剖分+线段树),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接:hdu 4897 Little Devil I
题目大意:给定一棵树,每条边有黑白两种颜色,初始都是白色,现在有三种操作:
- 1 u v:u到v路径上的边都取成相反的颜色
- 2 u v:u到v路径上相邻的边都取成相反的颜色(相邻即仅有一个节点在路径上)
- 3 u v:查询u到v路径上有多少个黑色边
解题思路:树链剖分,用两个线段W和L维护,W对应的是每条的黑白情况,L表示的是每个节点的相邻边翻转情况
(对于轻链而言,重链直接在W上修改)
对于1操作,即为普通的树链剖分,直接在W上修改即可。
对于2操作,每次修改在L上,不过链的两端(即重链的部分)还需要在W上修改
对于3操作,每次查询,重链可以直接根据W中的值判断,轻链还要根据对应节点的L值来确定。
这篇关于hdu 4897 Little Devil I(树链剖分+线段树)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!