随笔分类 -  树—dfs序

摘要:考虑b的两种情况,一种是p的祖先,这种点有min(k,de[p] 1)个,然后每个这种b都有si[p] 1个c点可选; 另一种是p的子孙,要求是在p的子树内且deep在de[p]+1~de[p]+k之间,然后一个这样的b点贡献是si[b] 1,也就是在他的子树内选c点,考虑怎么算这个,用dfs序维护 阅读全文
posted @ 2019-04-22 15:39 lokiii 阅读(134) 评论(0) 推荐(0)
摘要:很明显的暗示,就是在树的dfs序上维护树状数组,加减的时候差分即可 cpp include include include include using namespace std; const int N=500005; int n,m,h[N],cnt,s[N],top,tot,t[N],fa[N 阅读全文
posted @ 2018-09-13 17:31 lokiii 阅读(132) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2018-08-20 07:48 lokiii 阅读(2) 评论(0) 推荐(0)
摘要:考虑每头牛到达之后的影响,u到达之后,从1到其子树内的点需要放慢的都多了一个,p为u子树内点的牛ans会加1 用线段树维护dfs序,每次修改子树区间,答案直接单点查询p即可 cpp include include using namespace std; const int N=100005; in 阅读全文
posted @ 2018-05-04 09:50 lokiii 阅读(127) 评论(0) 推荐(0)
摘要:可并堆就可以,但是想复健一下主席树。 考虑枚举管理者,然后选忍者的时候在子树中贪心的从小到大选。做成dfs序就是选区间内和小于等于k的最多点。可以用主席树,查询的时候在主席树上二分即可 这里注意,为了方便起见,离散化的时候即使值相同也离散成不同值,这样可以保证主席树叶子结点的size最大为1,方便二 阅读全文
posted @ 2018-04-16 09:56 lokiii 阅读(128) 评论(0) 推荐(0)