首页 > 其他分享 >左孩子右兄弟

左孩子右兄弟

时间:2024-03-17 17:11:26浏览次数:23  
标签:ch int 孩子 兄弟 节点 dp size

一、问题描述

P8744 [蓝桥杯 2021 省 A] 左孩子右兄弟

二、问题简析

2.1 左孩子右兄弟

首先,我们要了解怎么通过“左孩子右兄弟”表示法将多叉树转化为二叉树:对于一棵多叉树,一个父节点有多个子节点,将第一个子节点作为父节点的左孩子,并与父节点相连;将剩余的子节点作为左孩子的右兄弟,并用边与左孩子相连(不是父节点);处理完所有子节点后,再按一样的规则处理其余父节点。

以该多叉树为例:
图1
处理子节点:
图2
1 为根节点“拉一下”二叉树:
图3
注意: 多叉树中根节点的子节点并不一定按图所示的顺序排列,更准确地说,是无序的,也就是说左孩子和右兄弟的选择是任意的

2.2 树状dp

设 \(dp_i=\) 以 \(i\) 为根节点的二叉树的高度;\(A_i.size=\) 原多叉树中根节点 \(i\) 的子节点个数;\(j \in A_i\) 为根节点 \(i\) 的所有子节点
假设在原多叉树中,根节点 \(i\) 的子节点都是叶节点,即子节点没有子节点。结合上图,就是没有节点 6。显然,用“左孩子右兄弟”转化后,\(dp_i\) 仅取决于 \(i\) 的子节点的个数,即 \(dp_i=A_i.size\)。
在上文的基础上,假设子节点不再是叶节点,即子节点有子节点。结合上图,就是考虑节点 6。从贪心的角度,为了使二叉树最高,肯定要尽可能“延长”树,即最高的子树放在最下面。本例中,就是把节点 2 放在最下面,因为以 2 为根节点的子树高度为 \(1\),其余子树都为 \(0\)。贪心地处理后,最大高度就是根节点 \(i\) 的子节点个数 + 子树的最大高度

总结一下,

\[dp_i=A_i.size + max({dp_j~|~j\in A_i}) \]


三、AC代码

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

int quickin(void)
{
	int ret = 0;
	bool flag = false;
	char ch = getchar();
	while (ch < '0' || ch > '9')
	{
		if (ch == '-')    flag = true;
		ch = getchar();
	}
	while (ch >= '0' && ch <= '9' && ch != EOF)
	{
		ret = ret * 10 + ch - '0';
		ch = getchar();
	}
	if (flag)    ret = -ret;
	return ret;
}

const int MAX = 1e5 + 3;
int N, dp[MAX];
vector<int> A[MAX];

void dfs(int x)
{
	vector<int> B = A[x];
	for (int i = 0; i < B.size(); i++)
	{
		dfs(B[i]);
		dp[x] = max(dp[x], dp[B[i]]);
	}
	dp[x] += B.size();
}

int main()
{
	#ifdef LOCAL
	freopen("test.in", "r", stdin);
	#endif
	
	N = quickin();
	for (int i = 2; i <= N; i++)
	{
		int a = quickin();
		A[a].push_back(i);
	}
	
	dfs(1);
	cout << dp[1] << endl;
	
	return 0;
}

标签:ch,int,孩子,兄弟,节点,dp,size
From: https://www.cnblogs.com/hoyd/p/18078789

相关文章

  • 初中英语优秀范文100篇-087Walk for children in poor areas-为贫困地区的孩子们步行
    PDF格式公众号回复关键字:SHCZFW087记忆树1Notlongago,ourschoolorganizedacharitywalktoraisemoneyforchildreninpoorareas.翻译不久前,我们学校组织了一次慈善步行活动,目的是为贫困地区的孩子们筹集善款。简化记忆慈善句子结构主语Notlongago是......
  • 项目中和兄弟部门难以高效协作?你需要注意这四点
    在组织架构日益复杂的今天,靠一个人单打独斗完成工作或项目越来越难,也越来越不可能。不知你是否留意过,无论招聘什么岗位,几乎所有企业都在强调“团队合作”。这里的团队不光指的是同部门协作,要包括公司内部的跨部门合作,甚至是跨公司与客户团队一起工作。我们往往会发现,跨部门协作......
  • 在Windows上使用.NET部署到Docker 《让孩子们走出大坑》
    折腾Docker有几天了,整别的都没这个糟心。目前已经顺利部署运行起来了。顺便给大家分享下处理在Windows上使用.NET部署到Docker的相关问题解决方法。 1. Docker无法安装问题(下图是网上找了个类似的安装失败截图,页面大致一样,就是提示内容是DockerDesktop只能运行在win10......
  • 熊孩子:你不当人???
    一转眼,2024年寒假又来临了。想必各位有娃粉丝朋友正在为家中的娃娃犯愁吧,每当假期来临,便是孩子们放飞自我的时候,哪怕是如山的寒假作业,也早已抛之脑后。 可在竞争激烈的当下,慢一步就可能被别人家的孩子甩开一大截,更不要提宝贵的寒假了为了让孩子们拥有一个更加充实的寒假,小彭这......
  • 孩子从小生长在知识分子的家庭,或者传统的书香门第,家里规矩多管教严格,会对孩子性格造成
    农家子弟 单亲家庭 农耕之家    工薪阶层 农民工  中国旧社会的人总爱是“穷有穷根,富有富根”、“龙生龙,凤生凤,老鼠儿子会打洞”,现在这些老话都被推翻了,都说这是封建血统论和封建门第观。可是事实胜过强辩,我们发现民国学者大多是出身于书香门第和富贵之家。孩......
  • 孩子遇到的难题,父母正确的第一反应很重要!
         共情型、乐观型、战略型 ......
  • 中国孩子最缺的是什么?
    中国孩子缺很多东西,但“最”缺的,是职业探索。 我一直觉得很滑稽的一件事,一个孩子花十几年的时间寒窗苦读,但可能只需要花几天时间就确定了他的高考志愿,选一个专业然后就这样干一辈子。 “男怕入错行”,现在男女平等了,男女都一样。人生其实就两件事,事业和家庭。职业的选择......
  • 我该如何为你骄傲,我亲爱的孩子
    我该如何为你骄傲,我的孩子?当你已经12岁,风华正茂,像一个大人一样想要做自己的事我一直把你当做大孩子,和你谈心,和你聊天和你欢笑,相互嬉闹在大庭广众,可以忍受你飞来的一脚我希望在二代之间,没有隔阂我希望你大胆做你想做之事,在不出格......
  • 为什么说家庭教育是孩子的第一所学校,爸妈们(父母)是孩子的第一任老师?
    父母是孩子的第一任教师,家庭是人生的第一课堂。——家庭教育在孩子成长中的价值家庭教育好了,学校教育就会轻松高效,这是一个简单却管用的道理 无论多好的学校教育都代替不了家庭教育家庭是未成年人生活的第一环境,是他们成长的起点和摇篮,而从教育这个角度看,家庭则是孩子的第一......
  • 超级玛丽 马里奥 马力欧兄弟
    超级马力欧兄弟》是任天堂情报开发本部开发的FamilyComputer横版卷轴动作游戏,为《超级马力欧兄弟》系列的第1作,于1985年9月13日发售。 [1]在游戏中,玩家将操纵一名叫做马力欧的水管工(如果是双人模式,则另一位玩家操作马力欧的弟弟路易吉)跋山涉水、闯过一关又一关,最终救出被酷霸王......