DFS序
Anxdada
多读书多看报, 少吃零食多睡觉
展开
-
CF--- PROBLEM 620 E 【思维 + DFS序 + 二进制状态】
传送门 //题意: 对于一棵树以1为根的树, 每个结点有一种颜色. 现在有两种操作. 1 x y 把以x为根节点的子树中的所有节点染成颜色y 2 x 询问以x为根节点的子树中有多少种颜色的节点 //思路: 很明显的DFS序, 需要考虑几点, 涉及到线段树的区间修改. 然后就是颜色的计数, 由于颜色最多60种, 那么用long long 的二进制来表示它的颜色. 这样再pushup时直接左右原创 2017-09-09 11:36:50 · 288 阅读 · 0 评论 -
codeforces 877 problem E Danil and a Part-time Job 【dfs序 + 线段树区间异或修改】
传送门 //题意: 给定一颗有根(1 )树,树上每一个点起始都有一个值(0或1),然后有两个操作,pow x把以 x为根的子树全部异或1, get x输出以x为根的子树中有多少个1. //思路: 就是一个最裸的dfs序 + 线段树异或修改的,细节请看代码. 注意就是求一个区间中的1,那么就是区间长度-此时区间的值, 然后就是修改下lazy标记处就是了. 还有就是线段树中是dfs序的一些线段,所以原创 2017-11-06 15:11:51 · 496 阅读 · 0 评论 -
DFS序的学习
//DFS序是个很有用的东西, 可以将树上的信息维护成一个连续的区间, 从而使树变成一条一条的链, 我们就可以用线段树来维护这些链, 从而求出我们所要的东西. 因为遍历的次序. 一个结点和其子树一定是在一个连续的区间内. 遍历的写法: void dfs_id(int u,int fa) { p1[u] = ++ti; for(int i = head[u] ; ~i ; i原创 2017-09-09 11:33:27 · 357 阅读 · 0 评论