随笔分类 -  树刨

摘要:这里找到相应的分类的博客(DIY完了博客,但设置分类不会啊。逃~) 阅读全文
posted @ 2020-03-19 16:38 AlexPanda 阅读(246) 评论(0) 推荐(0)
摘要:题意:一棵树,每个点有颜色,4种操作,1.单点修改权值 2.单点修改颜色 3.查询路径颜色相同的点权和 4.查询路径颜色相同的点权最大值。 思路:树刨+线段树动态开点,开1e5个线段树。 代码: #include <bits/stdc++.h> using namespace std; #defin 阅读全文
posted @ 2019-10-11 11:43 AlexPanda 阅读(119) 评论(0) 推荐(0)
摘要:题意: 一颗树n个点有点权,m次操作。 操作两种: 换根 查询 x点的子树选每一个点,y点的子树选每一个点,如果两点点权相同ans++,输出ans n1e5,m5e5 换根是幌子,先按照1来树刨,这个跟bzoj3083结论一样,就是分三种情况: 当前根节点与被查询的点一样,那么这个点的子树区间直接是 阅读全文
posted @ 2019-09-09 15:10 AlexPanda 阅读(85) 评论(0) 推荐(0)
摘要:题意:在树上操作,每次将两点路径值全变负和单点修改。每次求两点间路径的最大值。 思路: 边权转点权的话,每次把一条边的儿子点作为该边的权值。想起来挺好想,很容易出问题。 查询修改的话,要将多算的那条lca去掉就可以了。剩下的就是板子。 总结: 去掉lca,只需要判断top[x]==top[y]时,x 阅读全文
posted @ 2019-08-22 19:09 AlexPanda 阅读(110) 评论(0) 推荐(0)
摘要:题意:对树上两点区间增加或减少每点的权值,单点查询每点的权值。 思路:一开始线段树写的,但是我的被卡了2*maxn的空间,优化一下就可以了,但是嫌太麻烦,出题人可能就打算卡部分人的线段树。 用bit的话,类似预处理数组,每次查询0-x点的区间和就可以,修改左端点和右端点的权值为v和-v即可。 代码: 阅读全文
posted @ 2019-08-21 22:48 AlexPanda 阅读(105) 评论(0) 推荐(0)
摘要:题意:区间修改树上两点间的颜色种类,区间查询树上两点间的线段数。 思路:树刨+线段树,区间合并是第一次写。思路为线段树维护左端点和右端点的颜色,合并时相同就–。具体实现不太好写。 代码: #include <bits/stdc++.h> using namespace std; #define ll 阅读全文
posted @ 2019-08-21 22:24 AlexPanda 阅读(120) 评论(0) 推荐(0)