树刨
Alex Panda
已不更新博客。
B站搜:BingPanda
展开
-
bzoj2243 树刨+线段树区间合并
题意:区间修改树上两点间的颜色种类,区间查询树上两点间的线段数。 思路:树刨+线段树,区间合并是第一次写。思路为线段树维护左端点和右端点的颜色,合并时相同就–。具体实现不太好写。 代码: #include <bits/stdc++.h> using namespace std; #define ll long long #define forn(i,n) for(int i=0;i&l...原创 2019-08-21 22:24:14 · 182 阅读 · 0 评论 -
hdu3966-树刨+bit区间修改单点查询
题意:对树上两点区间增加或减少每点的权值,单点查询每点的权值。 思路:一开始线段树写的,但是我的被卡了2*maxn的空间,优化一下就可以了,但是嫌太麻烦,出题人可能就打算卡部分人的线段树。 用bit的话,类似预处理数组,每次查询0-x点的区间和就可以,修改左端点和右端点的权值为v和-v即可。 代码: #include <bits/stdc++.h> using namespace st...原创 2019-08-21 22:47:41 · 144 阅读 · 0 评论 -
Poj3237 树刨+线段树(边权转点权)
题意:在树上操作,每次将两点路径值全变负和单点修改。每次求两点间路径的最大值。 思路: 边权转点权的话,每次把一条边的儿子点作为该边的权值。想起来挺好想,很容易出问题。 查询修改的话,要将多算的那条lca去掉就可以了。剩下的就是板子。 总结: 去掉lca,只需要判断top[x]==top[y]时,x和y是否相等,不等把deep浅的点+1即可。 边权转点权,因为你不知道谁是谁的父亲,所以要树刨完或...原创 2019-08-22 19:09:16 · 256 阅读 · 0 评论 -
bzoj3531 树刨+线段树动态开点
题意:一棵树,每个点有颜色,4种操作,1.单点修改权值 2.单点修改颜色 3.查询路径颜色相同的点权和 4.查询路径颜色相同的点权最大值。 思路:树刨+线段树动态开点,开1e5个线段树。 代码: #include <bits/stdc++.h> using namespace std; #define ll long long #define forn(i,n) for(int i=0...原创 2019-10-11 11:43:02 · 179 阅读 · 0 评论