树
Boxxxxxxx
只与自己做对比。
展开
-
CF383C 树状数组+dfs序
改变一下标dfs序的顺序就可以变成裸题了。这是老的dfs序但是这样子不方便修改。我们标dfs序的时候隔层标,变成这样隔层标的好处是对于题目而言的每一个修改操作,操作符相同的几个点的dfs序是连续的,这样我们就可以分两次改变两个连续区间,就是变成一道裸体了。举个例子比如我改变1的值,那么[2,3]区间是+val, [4,5]区间是-val,这就可以完成题目的要求。关于如何这个连续区间是多少,从哪里开始,你在写个简单dp维护一下就可以了int N,M;ll c[max_];il int lowb原创 2020-12-01 19:45:12 · 256 阅读 · 0 评论 -
牛客每日一题 4.7 树 树dp+组合数学
昨天的牛客鸽了,我不会数学首先第一步要理解题意就是要把树分成多个联通块,每个联通块的颜色都要不一样,求方案数。为什么每个联通块的颜色都不一样,因为如果有同样的颜色在不同的联通块上的话就无法满足题意,这两个点之间的路径的所有点就不会是都是同一种色。用f[i][j]代表的是以i为根的子树分成j个联通块的的方案数。由于我没想到大佬说的分成j个联通块就是删掉j-1条边,所以就硬算去合并每个子树的答案...原创 2020-04-06 16:06:16 · 215 阅读 · 0 评论 -
牛客每日一题4.1 Rinne Loves Edges 树dp
首先理解题意后可以转化为以S为根的树,用最少的权值去删除边,使得所有的叶子与S不相连。如果可以得出上面的题意那这题就是个树dp简单题了。那么设f[i] 为以i为根的子树,他的所有叶子都达不到i节点的最少权值花费。显然方程就是f[i] = sum( min ( f [to], i与to相连的权) )这个方程就是对于i的每一个儿子,你有两种选择,第一种是砍掉i与to相连的边,这样所有叶子都不...原创 2020-03-31 14:50:12 · 162 阅读 · 0 评论 -
牛客每日一题3.31 城市网络 树上倍增
首先要理解好题意,他是走的路上如果有大于当前最大的权值就必须拿,而不是寻找最长的子序列。他是可以拿就必拿。他题目的询问保证了起点now 和终点to 和顶点1必然在同一条链上!!!我们可以采取倍增的方式。dp[i][j]表示节点i往上2^j个节点,这些节点中最大的权值是谁。所以可以从起点开始往上跳,跳到第一个大于当前最大权值的点。然后更新最大权值,接着往上跳,跳到超出范围了为止。也就是你现在要...原创 2020-03-30 12:18:22 · 147 阅读 · 0 评论 -
牛客每日一题3.25 tokitsukaze and Soldier 权值线段树
考虑我们可以怎么获得答案,如果某一个人选了他,那么答案人数的集合就必定小于等于s[i], 对于答案需要的人的集合的人数为num,那么集合里面所有的s[i]的最小值必然是小于等于num。明确了上述最关键的点后就是可以知道,我们如果答案的人数是2人,则s[i]>=2的全部人数取前2个就是答案,s[i] < 2的被我们排除了。那么解题步骤就是设目标人数是num人,取s[i] >= n...原创 2020-03-24 20:04:50 · 410 阅读 · 0 评论 -
洛谷p2018 树DP
首先,本做法和其他的O(N^2logn)做法是完全不一样的,那种做法比较好理解,我说一下我的做法,感jio是O(Nlogn),不太会算首先思考如何获得每一点要如何知道由当前点出发的答案是什么?对于绝大部分点,都有父亲节点和儿子节点,那么对于每一个点都是这么抉择走的。这里先不看now点,看节点1,如果第一个人从节点1开始要怎么走呢?就是花4次时间, 分别走4跳荧光笔的路径对吧,然后就没节点1什...原创 2020-02-16 07:47:45 · 159 阅读 · 0 评论 -
Codeforces Round #615 (Div. 3) F 运行最快的做法!!
一开始输出是cout,发现就第二了,改printf就直接第一快了。我说下这题我的做法是什么。题目就是给你一棵树,叫你给出三个点,这三个点相连的简单路径的边数最多。样例的图解释的很清楚是什么意思了。怎么做呢?我一开始首先考虑两个点相连的情况,两个点的情况下什么时候会是拥有最长的边数?很明显就是大家都知道的两个点是树直径的端点时候,树直径大家都会,随便找一点bfs/dfs出最远的一个点,这个点就是...原创 2020-01-24 15:41:53 · 1858 阅读 · 0 评论 -
详解2020 CCPC-Wannafly Winter Camp Day3 Div.1 G火山哥周游世界 树dp
题目链接上面是样例2的图,首先我们看到数据范围就一定要明确,肯定不是暴力,然后由于题目说了是n个点n-1条边,这就是一棵树,在这里就要考虑到树dp!!(要是没想到就没了)我们来考虑下我们要什么,我们需要知道每个点走过所有目标点的最短路程,一个点怎么走完所有的目标点呢?设当前在i点从点i向上走,走完上面所有目标点后回到i,在从i往下走,走到到达最后一个目标点就停止从点i向下走,走完下面所有...原创 2020-01-22 17:21:03 · 1810 阅读 · 0 评论 -
洛谷p1769 DP(线段树思想)
这题乍一看很吓人,实则当你去手画一下比赛过程的时候就可以知道了,假设总人数有8人,1, 2 , 3 , 4 , 5 , 6 ,7 ,8.题目说了每一轮都是按编号顺序从小到大去比赛的那么第一轮就是(1,2),(3,4),(5,6),(7,8).这么个比赛顺序,第二轮就是(1,2)的胜利者去比(3,4)的胜利者(另外两个同理)。这个比赛的过程在我刚刚接触这个题的时候我想的是线段树的过程,但是是一个十...原创 2020-01-06 09:44:07 · 228 阅读 · 0 评论 -
洛谷p4178 点分治+线段树
题目链接:洛谷p4178这道题目是点分治的题目,与模板题不一样的是,这是要统计小于路径长度为k的点对数。我们分析下与模板题的区别,模板要求的是路径等于k的长度的路径是否存在,然后统计的方法是对于每个重心(跟),求出各点与根的路径,然后重心下面的各个子树中,相同的子树不去统计答案,去计算之前非该子树的路径能否凑出k的路径,也就是吧路径分成了(当前子树的路径与非当前子树的路径),然后其实我们也可以利...原创 2019-10-14 18:43:11 · 223 阅读 · 0 评论 -
hdu5593 树dp详解!!!
题目就是给你一个n点的树,每条边权值为1,对于每个点,求出离这个点距离不超过k的点的个数,然后答案是输出每个点的答案的异或和。分析,首先他是要求每个点距离不超过k的点数,对于每个点,这个不超过距离k的点数,我们可以从下面(就是这个点的子树去找), 也可以从这个点的上方去找。我们分别去考虑。用f[i][k] 表示从i这个点往下符合条件(距离为k)的点的答案。对于每个点,先去得到他子树去找到的...原创 2019-09-22 20:50:10 · 308 阅读 · 0 评论 -
hdu4123 树求每个节点的最长链+尺取法
题意:50000个点的树,每个点有一个人,每个人会跑到离自己初始点距离最远的点上,这个距离为distance[i]。给你500个查询,对于每个查询Q,找一段连续编号的人,比如[left,right],满足 max( distance[i] i∈[left,right] ) – min( distance[i] i∈[left,right] ) ≤ Q,并且使得length=right-left...原创 2019-09-15 10:53:58 · 312 阅读 · 0 评论 -
poj1655 dfs序+暴力
题意就是给你一棵树,然后去掉一个节点,求去掉哪个节点他的剩下的树的最大节点数最少。输出节点和最大子树节点数。由树dp专题看见这题,但是嘛。。。。。我第一眼都没意识到他是个dp。我的做法是这样的,就跑就只跑一遍dfs序,然后途中记录一下每个节点的父亲是谁。在暴力跑每一个点的答案。遍历每一个点的答案怎么出来呢?就是dfs序后,我们可以得知每一个点与其所有子树的范围在哪里。去掉这一个点,也就是说,...原创 2019-09-12 15:42:52 · 178 阅读 · 0 评论 -
hdu4514 并查集+树直径
这道题题目就是说给你一个图,然后判断能不能成环,不能成环就输出最长的那一条路。首先分析问题。怎么判断环?这是图中一个很常见的问题,在无向图中判环我们可以用并查集,在有向图中可以使用tarjan或者拓扑排序。这个问题是无向图,那么就用并查集就好了,在输入图的过程就可以判断,每当有一条线,我们就找这条线两个端点的父亲,如果父亲一样,那么他们就是构成了环。因为父亲一样说明之前已经两个点用过了并且连在...原创 2019-09-12 13:19:02 · 194 阅读 · 0 评论