NOIP2018-J-4-对称二叉树的题解

news2024/9/20 6:16:49

原题描述:

题目描述

时间:1s   空间:256M
 

一棵有点权的有根树如果满足以下条件,则被轩轩称为对称二叉树

1. 二叉树;

2. 将这棵树所有节点的左右子树交换,新树和原树对应位置的结构相同且点权相等。

下图中节点内的数字为权值,节点外的id 表示节点编号。

 

现在给出一棵二叉树,希望你找出它的一棵子树,该子树为对称二叉树,且节点数最多。请输出这棵子树的节点数。

注意:只有树根的树也是对称二叉树。本题中约定,以节点T 为子树根的一棵「子树」指的是:节点T 和它的全部后代节点构成的二叉树。

输入格式:

第一行一个正整数 n,表示给定的树的节点的数目,规定节点编号1 \sim n,其中节点 11 是树根。  

第二行 n 个正整数,用一个空格分隔,第 i个正整数 v_i 代表节点i的权值。  

接下来 n 行,每行两个正整数 l_i,r_i​,分别表示节点 i的左右孩子的编号。如果不存在左 / 右孩子,则以-1 表示。两个数之间用一个空格隔开。

输出格式:

输出文件共一行,包含一个整数,表示给定的树的最大对称二叉子树的节点数。

样例1

样例输入1:
2
1 3
2 -1
-1 -1
样例输出1:
1
样例解释 1

最大的对称二叉子树为以节点 2 为树根的子树,节点数为 1。

样例2

样例输入2
10
2 2 5 5 5 5 4 4 2 3
9 10
-1 -1
-1 -1
-1 -1
-1 -1
-1 2
3 4
5 6
-1 -1
7 8
样例输出 2
3
样例解释 2

最大的对称二叉子树为以节点 7 为树根的子树,节点数为 3。

本题约定:

层次:节点的层次从根开始定义起,根为第一层,根的孩子为第二层。树中任一节点的层次等于其父亲节点的层次加 1。 树的深度:树中节点的最大层次称为树的深度。

满二叉树:设二叉树的深度为 ℎ,且二叉树有 2^h -1 个节点,这就是满二叉树。

完全二叉树:设二叉树的深度为 ℎ,除第 ℎ层外,其它各层的结点数都达到最大个数,第 ℎ 层所有的结点都连续集中在最左边,这就是完全二叉树。

 主要思路:

很简单的一题,暴力判断,如果可以,就ans=max(ans,子树节点个数)

check(int l,int r)函数:

如果都是-1,那么return 1;

如果只有一个是-1,那么return 0;

如果权值不同,那么return 0;

否则:

return check(zuo[l],you[r])&&check(you[l],zuo[r]);因为都是对应的

求子树节点个数(dfs)

说了这么多,直接看代码。

请别说我说太少,是因为这题真的很简单。

代码code:

#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[1000010];
int zuo[1000010],you[1000010];
int fa[1000010],zi[1000010];
int root;
//int cnt=0;
bool check(int x,int y)
{
	if (x == -1&&y == -1)
	{
		return 1;
	}
	if(x == -1||y == -1)
	{
		return 0;
	}
	if(a[x]!=a[y])
	{
		return 0;
	}
	return ((check(zuo[x],you[y])&&check(you[x],zuo[y])));
}
vector<int> v;
void dfs(int x)
{
	if(x == root)
	{
		return ;
	}
	zi[fa[x]]++;
	dfs(fa[x]);
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	for(int i=1;i<=n;i++)
	{
		cin>>zuo[i]>>you[i];
		fa[zuo[i]] = i;
		fa[you[i]] = i;
		if(zuo[i] == -1&&you[i] == -1)
		{
			v.push_back(i);
		}
		zi[i] = 1;
	}
	for(int i=1;i<=n;i++)
	{
		if(fa[i] == 0)
		{
			root = i;
		}
	}
//	cout<<zi[1]<<'\n';
//	dfs(1);
	for(int i=1;i<=n;i++)
	{
		dfs(i);
	}
//	for(int i=1;i<=n;i++)
//	{
//		cout<<zi[i]<<' ';
//	}
//	cout<<'\n';
	int ans=0;
	for(int i=1;i<=n;i++)
	{
		if(check(zuo[i],you[i]))
		{
			ans = max(zi[i],ans);
		}
	}
	cout<<ans;
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1465527.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习的基本术语和概念】

曾梦想执剑走天涯&#xff0c;我是程序猿【AK】 目录 简述概要知识图谱 简述概要 提示&#xff1a;简要描述文章内容&#xff0c;适合哪些人观看 知识图谱 样本&#xff08;Sample&#xff09;/实例&#xff08;Instance&#xff09;&#xff1a;在机器学习中&#xff0c;我…

vue-利用属性(v-if)控制表单(el-form-item)显示/隐藏

表单控制属性 v-if 示例&#xff1a; 通过switch组件作为开关&#xff0c;控制表单的显示与隐藏 <el-form-item label"创建数据集"><el-switch v-model"selectFormVisible"></el-switch></el-form-item><el-form-item label&…

AndroidStudio 2024-2-21 Win10/11最新安装配置(Kotlin快速构建配置,gradle镜像源)

AndroidStudio 2024 Win10/11最新安装配置 教程目的&#xff1a; (从安装到卸载) &#xff0c;针对Kotlin开发配置&#xff0c;gradle-8.2-src/bin下载慢&#xff0c;以及Kotlin构建慢的解决 好久没玩AS了,下载发现装个AS很麻烦,就觉得有必要出个教程了(就是记录一下:嘻嘻) 因…

❤ hexo主题+Gitee搭建个人博客

Hexo的基本使用 ​官网 官网地址&#xff1a;https://hexo.io/zh-cn/ Hexo是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown&#xff08;或其他渲染引擎&#xff09;解析文章&#xff0c;在几秒内&#xff0c;即可利用靓丽的主题生成静态网页。即把用户的markdown文件…

开源LLMs导览:工作原理、顶级LLM列表对比

目录 一、开源 LLM 是什么意思&#xff1f;二、开源LLM如何工作&#xff1f;2.1 预训练2.2 代币化2.3 开源LLM的微调2.4 输入编码2.5 训练与优化2.6 推理 三、开源LLM对组织的好处3.1 增强的数据安全和隐私3.2 节约成本3.3 减少供应商依赖性3.4 代码透明度 四、哪种LLM模式最好…

AcrelEMS-HIM高速公路综合能效系统在高速公路的案例

摘 要&#xff1a;我国新型工业化、信息化、城镇化和农业现代化加快发展&#xff0c;经济结构加快转型&#xff0c;交通运输总量将保持较快增长态势&#xff0c;各项事业发展要求提高国家公路网的服务能力和水平。高速公路沿线的收费站、互通枢纽、服务区、隧道等配置的供配电、…

白令海峡的题解

目录 原题描述&#xff1a; 题目描述 输入格式 输出格式 样例输入 样例输出 样例解释 数据规模 主要思路&#xff1a; 小细节&#xff1a; 代码code: 原题描述&#xff1a; 时间限制: 1000ms 空间限制: 524288kB 题目描述 很久很久以前&#xff0c;一座大陆桥横…

云图极速版限时免费活动

产品介绍 云图极速版是针对拥有攻击面管理需求的用户打造的 SaaS 应用&#xff0c;致力于协助用户发现并管理互联网资产攻击面。 实战数据 (2023.11.6 - 2024.2.23) 云图极速版上线 3 个月以来&#xff0c;接入用户 3,563 家&#xff0c;扫描主体 19,961 个&#xff0c;累计发…

Atcoder ABC341 A-D题解

比赛链接:ABC341 Problem A: 先签个到。 #include <bits/stdc.h> using namespace std; int main() {int n;cin>>n;for(int i0;i<n;i)cout<<"10"<<endl;cout<<"1"<<endl;return 0; } Problem B: 继续签。 #i…

3D模型可视化引擎HOOPS Visualize V2024版全新发布:增强了大量点云数据集的处理,与HOOPS系列产品集合实现照片级渲染!

HOOPS Visualize是一款工业级3D渲染引擎&#xff0c;可以用于打造移动端和PC端工程应用程序&#xff0c;其灵活、分层的场景管理引擎&#xff0c;支持处理各种3D模型实体&#xff0c;其高性能图形和交互处理算法&#xff0c;支持大型模型可视化&#xff0c;现已帮助达索 SOLIDW…

这两招,让你轻松俘获客户心

面向政府的数字化解决方案作为睿鸿数字应用的一个分支&#xff0c;在充分借鉴政府项目中积累的丰富经验的基础上&#xff0c;积极开发更多领域通用的标准化产品。 2023年&#xff0c;睿鸿推出了一系列创新的数字应用产品&#xff0c;包括动态表单系统、统一集成门户、统一通信中…

你听说过柔性数组吗?

目录 1. 柔性数组的概念 2. 柔性数组的特点 3. 柔性数组的使用 4. 柔性数组的优势 5.完结散花 悟已往之不谏&#xff0c;知来者犹可追 创作不易&#xff0c;宝子们&#xff01;如果这篇文章对你们有帮助的话&#…

动态SLAM:基于ORB-SLAM2与YOLOv8剔除动态特征点(三种方法)

基于ORB-SLAM2与YOLOv8剔除动态特征点(三种方法) 写上篇文章时测试过程比较乱&#xff0c;写的时候有些地方有点失误&#xff0c;所以重新写了这篇 本文内容均在RGB-D环境下进行程序测试 本文涉及到的动态特征点剔除速度均是以https://cvg.cit.tum.de/data/datasets/rgbd-dat…

RF 框架实现企业级 UI 自动化测试

RobotFramework 框架可以作为公司要做自动化 但是又不会代码的一种临时和紧急情况的替代方案&#xff0c;上手简单。 前言 现在大家去找工作&#xff0c;反馈回来的基本上自动化测试都是刚需&#xff01;没有自动化测试技能&#xff0c;纯手工测试基本没有什么市场。 但是很多…

【动态规划】【回文】【字符串】1147. 段式回文

作者推荐 【广度优先搜索】【网格】【割点】【 推荐】1263. 推箱子 本文涉及知识点 动态规划汇总 LeetCode1147段式回文 你会得到一个字符串 text 。你应该把它分成 k 个子字符串 (subtext1, subtext2&#xff0c;…&#xff0c; subtextk) &#xff0c;要求满足: subtext…

如何将QQ音乐的歌单导出到excel

一、提前准备 1.选择你需要导出的音乐歌单 2.得到你的歌单ID 1、首先打开QQ音乐&#xff0c;找到想要查看的歌单&#xff0c;点击歌单右上角的更多按钮。 2、其次在弹出的菜单中选择分享&#xff0c;在分享页面中&#xff0c;选择歌单分享。 3、最后在分享页面中&#xff0c…

kafka和ZK的关系

zk相当于是kafka的一个基础设施 Kafka是一种高吞吐量、可扩展的分布式发布订阅消息系统&#xff0c;ZooKeeper是一个分布式协调服务&#xff0c;用于管理和协调分布式系统中的各种资源 Zookeeper&#xff1a;管理broker&#xff0c;consumer 创建broker后&#xff0c;向zk注册…

Leetcoder Day18| 二叉树 part07

语言&#xff1a;Java/Go 今天做了一个小决定&#xff0c;如果时间不够的话&#xff0c;可以先看go去找实习&#xff0c;所以现在加上用go去刷题 530.二叉搜索树的最小绝对差 给你一棵所有节点为非负值的二叉搜索树&#xff0c;请你计算树中任意两节点的差的绝对值的最小值。…

Stable Diffusion 绘画入门教程(webui)-ControlNet(深度Depth)

上篇文章介绍了线稿约束&#xff0c;这篇文章介绍下深度Depth 文章目录 一、选大模型二、写提示词三、基础参数设置四、启用ControlNet 顾名思义&#xff0c;就是把原图预处理为深度图&#xff0c;而深度图可以区分出图像中各元素的远近关系&#xff0c;那么啥事深度图&#xf…

rust下载文件

背景 最近晚上给娃听故事 这页面不能连续播放,想着下载下来用默认播放器播放好了, 刚好最近在学rust,就用rust实现mp4下载. 动手 整理下载链接 由于链接可能涉及不必要的纠纷就先不明文列出来了 编码 解析json use serde::{Deserialize,Serialize}; use serde_json;#[der…