ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

#树形dp,树链剖分#CF442D Adam and Tree

2022-02-18 20:32:46  阅读:133  来源: 互联网

标签:颜色 剖分 int Tree CF442D ans fi 节点 dp


题目

初始有一个点 1,每次新加入点 \(2\sim n+1\),给这条边染上新的颜色,

并且一种颜色只能出现在一条路径上,使得每个点到根节点的路径上颜色种类数尽量少

每次询问输出每个点到根节点路径上颜色种类最大值

\(n\leq 10^6\)


分析

考虑到 \(x\) 只与其中一个子节点的边颜色相同,如果存在两个子节点的边颜色相同,

那么 \(x\) 到根节点就不能填这种颜色,反而不如 \(x\) 到根节点填这种颜色的颜色种类数

设 \(dp[x]\) 表示 \(x\) 的子树的结点到 \(x\) 的路径上颜色种类数的最大值。

那么选择其中一个子节点 \(dp\) 值最大的,设其为 \(fi[x]\),次大值为 \(se[x]\)

如果 \(x\) 连 \(fi[x]\) 所在的子节点,那么其它子节点的答案会加一,连其它节点 \(fi[x]+1\) 代价更大一定不优。

所以 \(dp[x]=\max\{fi[x],se[x]+1\}\),然后每次答案就是 \(fi[1]\),(\(dp[1]\) 默认有一个父亲不是真正的颜色种类)

如果还未更新,\(dp[x]=\max\{fi[x],se[x]+1\}\),那么 \(x\) 到根节点的路径也不会受影响,直接退出。

这样看似时间复杂度仍然是 \(O(n^2)\),其实不然,

考虑到一种染色就是轻重链剖分之后重链染同一种颜色,那么颜色种类数为 \(O(\log n)\)

这显然是上界,那么时间复杂度为 \(O(n\log n)\)

感觉这道题出得好妙啊,不仅用到了轻重链剖分的性质,还结合了树形dp。(dp可菜了QAQ


代码

#include <cstdio>
#include <cctype>
using namespace std;
const int N=1000011;
int n,fa[N],fi[N],se[N],dp[N];
int iut(){
	int ans=0,f=1; char c=getchar();
	while (!isdigit(c)) f=(c=='-')?-f:f,c=getchar();
	while (isdigit(c)) ans=ans*10+c-48,c=getchar();
	return ans*f;
}
void print(int ans){
	if (ans>9) print(ans/10);
	putchar(ans%10+48);
}
int max(int a,int b){return a>b?a:b;}
int main(){
	n=iut()+1,dp[1]=1;
	for (int i=2;i<=n;++i){
		fa[i]=iut(),dp[i]=1;
		for (int x=i;fa[x];){
			if (fi[fa[x]]<dp[x]) se[fa[x]]=fi[fa[x]],fi[fa[x]]=dp[x];
			    else if (se[fa[x]]<dp[x]) se[fa[x]]=dp[x];
			int now=max(fi[fa[x]],se[fa[x]]+1);
			if (dp[fa[x]]==now) break;
			dp[fa[x]]=now,x=fa[x];
		}
		print(fi[1]),putchar(32);
	}
	return 0;
}

标签:颜色,剖分,int,Tree,CF442D,ans,fi,节点,dp
来源: https://www.cnblogs.com/Spare-No-Effort/p/15911157.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有