首页 > 其他分享 >换根 DP 板子

换根 DP 板子

时间:2023-04-27 20:00:38浏览次数:46  
标签:recalc int 板子 nx fa DP ins 换根 dp

以前一直以为这玩意是随机应变的。

结果还真能总结出板子。

当然也有一定的局限性,比如 \(dp\) 值必须 \(O(1)\) 算。但不影响正常使用。

ins:向 \(k\) 的子树信息中插入/删除 \(nx\) 的子树信息

这里的 子树dfs1 中是指以 \(1\) 为根的子树;dfs2 中是指以 \(k\) 为根。

recalc:重新计算 \(k\) 的 \(dp\) 值。

recalc 的信息储存在 dp_[k] 内,dp[k] 是最终的 \(dp\) 值。

void dfs1(int k, int fa)
{
	for(int i = h[k]; ~i; i = ne[i])
	{
		int nx = e[i];
		if(nx == fa)
			continue;
		dfs1(nx, k);
		ins(k, nx, 1);
	}
	recalc(k);
}

void dfs2(int k, int fa)
{
	dp[k] = dp_[k];
	for(int i = h[k]; ~i; i = ne[i])
	{
		int nx = e[i];
		if(nx == fa)
			continue;
		ins(k, nx, -1);
		recalc(k);
		ins(nx, k, 1);
		recalc(nx);
			
		dfs2(nx, k);
		
		ins(nx, k, -1);
		recalc(nx);
		ins(k, nx, 1);
		recalc(k);
	}
}

标签:recalc,int,板子,nx,fa,DP,ins,换根,dp
From: https://www.cnblogs.com/ningago/p/17360081.html

相关文章

  • 区间DP小结(附经典例题) 转载
    区间DP转载自:原博客一、定义​区间DP是线性动态规划的扩展,适用场景为每段区间的最优解可以通过更小区间的最优解得到。所以我们一般的解题思路都是先在小区间得到最优解,然后总结出递推公式,利用小区间的最优解求大区间的最优解。二、实现伪代码//mst(dp,0)初始化dp数组for......
  • P4316 绿豆蛙的归宿(期望dp)
    题目描述给出张n个点m条边的有向无环图,起点为11,终点为n,每条边都有一个长度,并且从起点出发能够到达所有的点,所有的点也都能够到达终点。绿豆蛙从起点出发,走向终点。到达每一个顶点时,如果该节点有k条出边,绿豆蛙可以选择任意一条边离开该点,并且走向每条边的概率为1/k。现......
  • CF960F Pathwalks | 线段树优化DP
    题目设\(dp[x,w]\)为以结点\(x\)为结尾,且最后一条边边权为\(w\)的最长路径长度。考虑根据顺序加边,对于边\((u,v)\),更新\[dp[v,w]=\max_{w'<w}\{dp[u,w']\}+1\]对于每个节点,建一棵线段树,维护\(dp[x]\),这样每次更新\(dp[v,w]\)就相当于在\(dp[u]\)所对应的线段树中查询\([......
  • DP 概论
    对于一个题目,我们有暴力搜索算法。而dp就是尽可能将同一类的东西合并到一个状态上。如何检查dp的正确性?检查集合内部转移是否一致。检查方案数是否正确。状压dp有好几种状态压缩的方式:记录“选了哪些东西”这样的信息,可以用一个长度为\(n\)的01串,对应一个十进制......
  • 【DP】LeetCode 740. 删除并获得点数
    题目链接740.删除并获得点数思路分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律在数组的动态规划问题中,一般dp[i]都是表示以nums以前i个元素组成(即nums[i-1])的状态;dp[i][j]分别表示以nums1前i个元素(......
  • C# 获取系统DPI缩放比例以及分辨率大小
    一般方法System.Windows.Forms.Screen类//获取当前主屏幕分辨率intscreenWidth=Screen.PrimaryScreen.Bounds.Width;intscreenHeight=Screen.PrimaryScreen.Bounds.Height;//获取指定屏幕分辨率ScreensecondaryScreen=Screen.AllScreens[1];intsecondaryScree......
  • 区间dp
    区间dp前情提要先赞后看,必成习惯一、区间dp-常见的也常考的dp1.区间dp是什么?区间动态规划是用dp的状态来表示和一段区间有关的性质,比如说dp[i][j]表示解决区间[i,j]上的子问题的最小代价或最大收益,然后利用区间子问题之间的关系递推求解。2.区间dp怎么写?区间dp常见的有......
  • LengthFieldPrepender和LengthFieldBasedFrameDecoder
    1,使用LengthFieldPrepender编码,LengthFieldBasedFrameDecoder解码的netty传输......
  • 【DP】LeetCode 213. 打家劫舍 II
    题目链接213.打家劫舍II思路分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律在数组的动态规划问题中,一般dp[i]都是表示以nums以前i个元素组成(即nums[i-1])的状态;dp[i][j]分别表示以nums1前i个元素(即n......
  • 本地图文直接复制到WordPress编辑器中
    ​ 在之前在工作中遇到在富文本编辑器中粘贴图片不能展示的问题,于是各种网上扒拉,终于找到解决方案,在这里感谢一下知乎中众大神以及TheViper。通过知乎提供的思路找到粘贴的原理,通过TheViper找到粘贴图片的方法。其原理为一下步骤:监听粘贴事件;【用于插入图片】获取光标位置;【......