
树形DP
二分抄代码
去了18ec没资格去19ec的反向训练选手
展开
-
洛谷 P3523 [POI2011]DYN-Dynamite
https://www.luogu.com.cn/problem/P3523跟https://blog.youkuaiyun.com/liufengwei1/article/details/115410709一样改了一点地方,就是只有当前点时关键点时,g[u]初始为0,否则则为-inf。这题还有点卡常,第一次没点O2优化超时了,因为用了vector,点了O2后900+ms,洛谷评测姬3e5 nlogn都这么慢的么。。。#include<bits/stdc++.h>using namespac原创 2021-04-07 15:12:08 · 166 阅读 · 0 评论 -
AtCoder Regular Contest 116 E - Spread of Information
.https://atcoder.jp/contests/arc116/tasks/arc116_e学习自https://blog.youkuaiyun.com/RealKing_sblog/article/details/115359363这题一眼就是二分答案转判定,然而不知道怎么得到最少的关键点数我们维护每个子树的根节点到子树内所有非法点的距离,如果某个儿子距离超过了mid,我们需要考虑是否从其他儿子的树合并过来如果最后该子树根节点还是超过mid,则需要在u放一个关键点。最后出去判断一下1是否还要放原创 2021-04-03 01:11:30 · 382 阅读 · 2 评论 -
2019ICPC徐州M Kill the tree
https://nanti.jisuanke.com/t/42552这场终于有道会做的题了。。。我还是只会dp,规律题数学题蛤不清be这个感觉就是求出每个子树的重心啊,然后因为没看到两个重心都要算出来还wa了以后对拍,结果发现经典题目看漏了,然后样例又没有2个的情况。。。子树的重心要么是1个要么是连续的两个那么树形DP就行了,dpf[u]表示当前子树其他所有点到u的距离综合,ans[u][0]表示u的重心中较深的那个,dp[u]表示重心的那个所有点距离之和,son[u]表示子树节点个数,原创 2021-03-02 17:23:04 · 182 阅读 · 0 评论 -
codeforces1453E. Dog Snacks
https://codeforces.com/contest/1453/problem/E感觉E比D简单。。。流下了经典想不清期望的泪水.jpg观察发现如果当到了u,选择一个子节点v1,一定会把那棵子树v1吃光,才能穿过u去另一个子树v2dp[u]表示吃完u的子树,最后能停的最小深度然后对于每个不是1的根节点,他肯定要从某个儿子所在的子树的dp[v],跳到另一个儿子节点,那么这个距离最少就是dp[v]-dep[u]+1,每个这个跳的距离都更新一下ans然后1为根节点的时候特判一下,因为可原创 2020-12-05 00:14:25 · 502 阅读 · 0 评论 -
gym102798C Rencontre 2020CCPC威海
https://codeforces.com/gym/102798/problem/C比赛的时候枚举3个点的中心点然后嗯算方案数,写了100多行的dfs计数。。。然后wa 3然而这题只要想到,3个点到中心点的最小距离,要么一条链在中间点上,要么在3叉路口上,这两种情况都可以拆成从a-b,b-c,a-c的路径之和/2然后这个问题就转换成了3组独立问题,每组就是两个人任选2个点之间的期望距离之和那么就直接dfs下去算每条边的贡献就行了,每条边的贡献就是连接的两端连通块中a,b的数量乘起来,a*b原创 2020-11-13 00:49:35 · 369 阅读 · 1 评论 -
hdu6866 Linuber File System 2020杭电多校第八场
http://acm.hdu.edu.cn/showproblem.php?pid=6866又从wcy聚聚那学到了QAQ这题比赛的时候猜想一定是选l[i]或者r[i],然而存在加法问题,就完全不知道怎么办然而可以转化一下,设dp[u][i]为u的子树,从1到u的路径上所有点的加的值是i时,这棵子树中最小的修改值的次数枚举u的一个儿子v中所有的可能值dp[v][j], 如果j=i,也就是说从u到v时不需要修改v的值,否则需要修改也就是+1,那么dp[u][i]+=v的最小值就行了。我们发现原创 2020-08-18 02:12:18 · 244 阅读 · 0 评论 -
hdu6820 Tree 2020杭电hdu多校第5场1007
树形DP裸题,不知道为啥过得不是很多,可能都被前期题卡住了没看这题sumkj1[v]表示以v为根节点选k-1个子节点并且全部满足度数不超过k的最大连通块的边权和sum[v]=sumkj1[v]+e[u][v].l,也就是包含一条连向父亲的节点这个用一遍dfs就能处理出来,每次排个序取最大的k-1个子节点第二遍dfs求把父节点fa当做子树到u的满足条件的最大连通块的边权和存到u所连向的点的g[v,l]中,其中 l 表示v子树的最大值然后我们假设把u当那个超过k的,也就是把g[u]中所有的子原创 2020-08-04 17:00:17 · 559 阅读 · 0 评论 -
hdu6769 In Search of Gold 2020杭电hdu多校第2场
http://acm.hdu.edu.cn/showproblem.php?pid=6769正常的求直径的树形dp一般是记录一个最长链和一个次长链,然后第二遍换根dp再记录一个从父节点转移过来的最长链,然后求出这个直径。然而这题需要加一维j表示当前子树已经使用了j个a边后的最长链和次长链,这就很难搞了,因为无法保证最长链最小的同时保证最长链+次长链最小,然后思考了2小时人生。赛后题解理解不能,还是群巨牛逼,一问就懂。群巨补题地址http://www.koule2333.top:3000/s/H1L.原创 2020-07-24 01:17:24 · 293 阅读 · 2 评论 -
C Cover the Tree 2020牛客多校训练营第二场
https://ac.nowcoder.com/acm/contest/5667/C叶子节点的个数tot,答案肯定是tot/2+(tot&1),叶子节点两两配对就行首先树形dp找到一个根节点rt,子树v中中包含的叶子节点为son[v],他的所有子树中son[v]最大的最小,设这个根节点为rt然后把每个子树v中的叶子节点放到队列q[v]中,然后每次取剩余叶子节点最多的两个子树作为路径,用set动态维护队列大小最后如果剩多了一个就直接到这个根节点rt。这样的每次取最大的两个很显然是对的,原创 2020-07-13 18:48:34 · 227 阅读 · 0 评论 -
codeforces1324F Maximum White Subtree
https://codeforces.com/problemset/problem/1324/F理解样例20分钟,写题10分钟系列subtree不是子树是子图树形DP维护sonval[u]表示以1位根,向下的子图能得到的最大值然后第二遍维护faval,向上的子图能得到的最大值。#include<bits/stdc++.h>using namespace std;...原创 2020-03-13 14:57:49 · 319 阅读 · 0 评论 -
codeforces1294F Three Paths on a Tree
https://codeforces.com/problemset/problem/1294/F对于3个点之间的路径并集,我们可以在它的路径并集上找到一个点,使得这个点到这三个点之间的路径互不相交,那么这个问题就转化到了从某个点出发3条不相交的路径最长的问题,那么这就是个经典树形DP了,每个点维护最长路,次长路,次次长路注意一些细节,最后我们把中心点找出来后,它的每个子树只能找离他最远的一...原创 2020-01-23 11:58:08 · 308 阅读 · 0 评论 -
hdu6241 Color a Tree
http://acm.hdu.edu.cn/showproblem.php?pid=6241比赛的时候读了个假题还觉得巨对无比赛后想不明白到看题解发现题读错了,B限制是除了b[i].x子树的被染色点总共至少要有b[i].y个被染色,而不是之外的每个点的子树要有b[i].y个。。。那么这道题就很简单了,对于二分的mid,A限制就是说子树被染色节点有下限lst[u],B限制就是子树被染色节...原创 2019-10-30 20:53:32 · 207 阅读 · 0 评论 -
hdu6662 Acesrc and Travel
http://acm.hdu.edu.cn/showproblem.php?pid=6662之前那几题都没写换根树形DP,好久没写换根了写了好久,初始化还写错了,对着多校数据调了好久。。。换根树形DP的关键就是dfs2次,先记录子树信息,再dfs一遍更新从父节点过来的信息。这题先手拿,后手必然会拿子节点中对自己最优的,所以转移是固定的。那么先dp[u][0]表示先手拿u的点能得到的...原创 2019-10-11 20:16:31 · 359 阅读 · 0 评论 -
hdu6686 Rikka with Travels
http://acm.hdu.edu.cn/showproblem.php?pid=6686捧杯爷多校过掉的题,当时我口胡完没写完,现在补题又花了3个多小时,不停地边想边改,加了数组又发现记录的不够又加一个数组记录一个值,我树形DP好菜啊.jpg这题要求距离对,那么我们记录ans[i],表示 存在(i,1),(i,2) (i,3)....(i,ans[i])都是存在的,这样我们只要求出每...原创 2019-10-11 00:13:59 · 270 阅读 · 0 评论 -
codeforces 1153D Serval and Rooted Tree
https://codeforces.com/problemset/problem/1153/D太菜了,1800分的题没点思路。看了别人代码,我们可以用dp来实现,dp[i]表示第i个点为根节点的子树,他需要消耗的叶子节点是多少个。一个点需要消耗dp[i]个点,意思也就是说给他分配k个数,只有dp[i]个数会消耗实际数字个数,其他数字随便分。那么答案就是k-dp[1]+1.叶子...原创 2019-04-15 21:54:58 · 220 阅读 · 0 评论 -
HDU6201树形DP
考场上能想出一道树形DP,感觉很爽,本来OI时期树形DP只会点树形背包什么的,这里完全是临时脑补出一种模型,美滋滋。一棵树上,从任意一个点到任意另外一个点利润为价格差-路费,即w[v]-w[u]-dis[u][v]最大。于是对于一个子树的根节点,假设它的子树们内部的情况已经跟新完ans了,于是不同子树之间的情况,吧w[v]-w[u]-dis[u][v]拆成,w[v]-dis[v][lca]和w...原创 2017-09-19 20:56:31 · 392 阅读 · 0 评论 -
hdu6540 Neko and tree
http://acm.hdu.edu.cn/showproblem.php?pid=6540这道捧杯爷湘潭现场写出来的题,做了两天还瞟了一眼题解的状态设计才做出来。。。菜不成声.jpg这题的关键我觉得是想到设 f [ u ] [ j ] 为以u为根的子树离u最远的点距离为 j 的方案数是多少。那么我们考虑如何得到f [ u ] [ j ]。f[u][j]=f[u][j]+f[u][...原创 2019-10-10 16:26:48 · 327 阅读 · 2 评论 -
2019西安邀请赛 J And And And
https://nanti.jisuanke.com/t/39277上半年湘潭西安全败在树形DP不会,然后浪费大量时间后做另外一题还没做完,菜哭.jpg这题首先是想到路径的异或为0可以变成点到根的路径异或值相等然后想到枚举u' <v' 这个相等更方便,接着就是想怎么统计有多少u<v可以选然后比赛的时候就不会了。。。。头都想烂了,主要是当时已经写了4题了,然后又到了后期,...原创 2019-10-08 16:54:49 · 193 阅读 · 0 评论 -
codeforces1223E Paint the Tree
https://codeforces.com/problemset/problem/1223/E还好unrated ,每次打div1都像加了降智buff,各种水题写不出。定一个dpk表示他向儿子最多选k条边的子树最大值,dpk1表示最多选k-1条边的子树最大值。那么对于一个子树的根节点,要么就选e[i].w+dpk1[v],要么就选dpk[v],而e[i].w+dpk1[v]的选择是有...原创 2019-10-08 00:20:17 · 213 阅读 · 0 评论