试题H 左Children右兄弟
(吐槽:为什么不能使用‘孩’和‘子’这两个字)
题目链接:https://www.lanqiao.cn/courses/2786/learning/?id=280825
题目解析:典型的树形DP
记dp[i]是以i结点为根的树的最大高度,则状态转移方程:
dp[cur] = max(dp[cur],e[cur].size() + dp[next]);
dp[cur] = 1 (当该结点没有子结点时)
其中e[cur]记录了cur结点的所有子节点,next为其中的一个结点
又1结点高度为0
故答案为dp[1]-1
代码:
//#define local
#include<cstdio>
#include<iostream>
#include<vector>
#define MAXN 100005
typedef long long ll;
using namespace std;
int max(const int &a,const int &b){return a>b?a:b;
}
int n;
vector<int>e[MAXN];
int dp[MAXN]={0};
void dfs(int cur){if(!e[cur].size()){dp[cur]=1;return;}else{for(int i=0;i<e[cur].size();++i){int next=e[cur][i];dfs(next);dp[cur]=max(dp[cur],e[cur].size()+dp[next]);}}
}
int main(){
#ifdef local
freopen("data.in","rb",stdin);
//freopen("data.out","wb",stdout);
#endif
scanf("%d",&n);
for(int i=2;i<=n;++i){int fa;scanf("%d",&fa);e[fa].push_back(i);
}
dfs(1);
printf("%d",dp[1]-1);
return 0;
}
试题H 左Children右兄弟相关推荐
- 第十二届蓝桥杯省赛A组试题:左儿子右兄弟Java
[问题描述] 对于一棵多叉树,我们可以通过 "左孩子右兄弟" 表示法,将其转化成一棵二叉树.如果我们认为每个结点的子结点是无序的,那么得到的二叉树可能不唯一.换句话说,每个结点可以 ...
- 蓝桥杯 左baby右兄弟
试题: 思路: "左孩子右兄弟"是常见的多叉树转化成二叉树的方法.具体的实现方式是,从第二层最右边的结点开始,将将自己的孩子结点放到左边,左边一位的兄弟放到左边的结点上.对于是多支 ...
- strcmp() Anyone? UVA - 11732 左孩子右兄弟Trie/计数
#include<bits/stdc++.h> using namespace std; #define ll long longconst int maxnode = 4000 * 10 ...
- left-child right-sibling representation of tree - 左孩子右兄弟表示树
left-child right-sibling representation of tree - 左孩子右兄弟表示树 child-sibling representation, left-child ...
- 多叉树的二叉树表示法(左儿子右兄弟)
在二叉树的基础上,我们可以扩展出任意多个叉的树.即,多叉树.然而,此时又面临着另外一个问题: 当孩子结点无限制时,我们并不知道预先要分配多少个属性,且当仅有少数元素拥有多个子节点时,将会造成大量的空间 ...
- 3422. 左孩子右兄弟
对于一棵多叉树,我们可以通过 "左孩子右兄弟" 表示法,将其转化成一棵二叉树. 如果我们认为每个结点的子结点是无序的,那么得到的二叉树可能不唯一. 换句话说,每个结点可以选任意子结 ...
- 辅助类BinaryTreeNodeLeftChildRightSibling(左孩子右兄弟,二叉树结点)
辅助类BinaryTreeNodeLeftChildRightSibling(左孩子右兄弟,二叉树结点) template<typename T> class BinaryTreeNode ...
- java实现家庭关系图_左孩子右兄弟二叉树实现家族家谱
/* Name: 家谱 Description: 本项目对家谱管理进行简单的模拟,以实现查看祖先和子孙个人信息.插入家族成员.删除家族成员等功能. */ #include #include using ...
- 小字辈(左子右兄加强版)
本题给定一个庞大家族的家谱,要请你给出最小一辈的名单. 需要注意的是,家族成员的输入方式,是按照"Left-child Right-sibling"(左儿子 右兄弟)的格式 [敲黑 ...
最新文章
- 算法炒房三月亏20多亿!房地产巨头大翻车!
- java条件查询excel_[转]EXCEL中的多条件查询(整理)
- ckeditor富文本编辑器的基本配置设置:
- linux编程技术进程代码,Linux进程通信—信号量 代码实现
- [异常解决] ubuntu上安装虚拟机遇到的问题(vmware坑了,virtual-box简单安装,在virtual-box中安装精简版win7)
- 机器学习笔记——皮尔逊相关系数
- 【NLP】自然语言处理 完整流程
- 让193FW显示1440x900还真不容易
- python设置函数_在Python中设置函数签名
- centos7限制普通用户访问单一目录下的单一文件
- 怎么理解汉罗塔问题_小白理解的汉诺塔中的递归问题
- 外贸B2C独立站玩不下去?
- Ajax.Responders
- hash签名 java_java开发区块链只需150行代码
- 2008服务器远程桌面连接设置密码,WinServer 2008 远程桌面连接设置
- 推荐一个数据库文档生成神器
- html5内嵌式格式,如何使用内嵌式引入css样式表
- 如何完美解决Sqoop导入导出MySQL数据错位问题
- 【Java】据给出的英文短文,作如下统计
- flash软件下载安装