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

原题描述:

题目描述

时间: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.mzph.cn/news/698876.shtml

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

相关文章

【深度学习】LoRA: Low-Rank Adaptation of Large Language Models,论文解读

文章&#xff1a; https://arxiv.org/abs/2106.09685 文章目录 摘要介绍LoRA的特点什么是低秩适应矩阵&#xff1f;什么是适应阶段&#xff1f;低秩适应矩阵被注入到预训练模型的每一层Transformer结构中&#xff0c;这一步是如何做到的&#xff1f; 摘要 自然语言处理的一个重…

计算机网络-网络互联与互联网(一)

1.常用网络互联设备&#xff1a; 1层物理层&#xff1a;中继器、集线器2层链路层&#xff1a;网桥、交换机3层网络层&#xff1a;路由器、三层交换机4层以上高层&#xff1a;网关 2.网络互联设备&#xff1a; 中继器Repeater、集线器Hub&#xff08;又叫多端口中继器&#xf…

图论(算法竞赛、蓝桥杯)--Dijkstra算法最短路

1、B站视频链接&#xff1a;D02 最短路 Dijkstra 算法_哔哩哔哩_bilibili 题目链接&#xff1a;【模板】单源最短路径&#xff08;弱化版&#xff09; - 洛谷 #include <bits/stdc.h> using namespace std; #define INF 2147483647 int n,m,s,a,b,c; const int N100010…

Redis的主从复制和哨兵模式

Redis的主从复制和哨兵模式 Redis集群搭建&#xff08;一主二从&#xff09;replication 主从复制配置文件 redis.confRedis主从复制工作原理全量复制增量复制redis主从复制策略 搭建集群 &#xff08;主从复制引入&#xff09; 哨兵模式概念哨兵配置文件 sentinel.conf哨兵配置…

ArcgisForJS如何使用ArcGIS Server发布的切片地图服务?

文章目录 0.引言1.准备海量地理数据2.ArcGIS Server发布切片地图服务3.ArcgisForJS使用ArcGIS Server发布的切片地图服务 0.引言 ArcGIS Server是一个由Esri开发的地理信息系统&#xff08;GIS&#xff09;服务器软件&#xff0c;它提供了许多功能&#xff0c;包括发布切片地图…

java面试设计模式篇

面试专题-设计模式 前言 在平时的开发中&#xff0c;涉及到设计模式的有两块内容&#xff0c;第一个是我们平时使用的框架&#xff08;比如spring、mybatis等&#xff09;&#xff0c;第二个是我们自己开发业务使用的设计模式。 面试官一般比较关心的是你在开发过程中&#…

挑战杯 基于卷积神经网络的乳腺癌分类 深度学习 医学图像

文章目录 1 前言2 前言3 数据集3.1 良性样本3.2 病变样本 4 开发环境5 代码实现5.1 实现流程5.2 部分代码实现5.2.1 导入库5.2.2 图像加载5.2.3 标记5.2.4 分组5.2.5 构建模型训练 6 分析指标6.1 精度&#xff0c;召回率和F1度量6.2 混淆矩阵 7 结果和结论8 最后 1 前言 &…

Oracle迁移到mysql-导出mysql所有索引和主键

导出建库表索引等&#xff1a; [rootlnpg ~]# mysqldump -ugistar -pxxx -h192.168.207.143 --no-data -d lndb > lndb20230223-1.sql 只导出索引&#xff1a;参考&#xff1a;MYSQL导出现有库中的索引脚本_mysql 导出数据库所有表的主键和索引-CSDN博客 -- MYSQL导出现有…

TCP Keepalive 和 HTTP Keep-Alive

HTTP 的Keep-Alive 在 HTTP 1.0 中默认是关闭的&#xff0c;如果浏览器要开启 Keep-Alive&#xff0c;它必须在请求的包头中添加&#xff1a; Connection: Keep-Alive然后当服务器收到请求&#xff0c;作出回应的时候&#xff0c;它也添加一个头在响应中&#xff1a; Connec…

相信未来:技术的进步意味着重构

十年以来&#xff0c;呼声最高&#xff1a;AI、BigData、Cloud Service。 以本人看来&#xff0c;仅AI技术的进步和应用&#xff0c;整个软件行业&#xff0c;所有软件将被重构。 提醒&#xff1a;非大学毕业、非计算机及相关专业&#xff0c;在IT这个行业&#xff0c;特别是…

主流开发语言和开发环境:探索编程世界的基础

在当今这个快速发展的技术时代&#xff0c;软件开发已经成为推动创新的重要力量。无论是构建下一代应用、开发先进的算法还是创建复杂的系统&#xff0c;选择合适的编程语言和开发环境都是至关重要的。在本文中&#xff0c;我们将探讨当前流行的几种主流开发语言以及它们常用的…

MATLAB使用绘图plot制作动态GIF

文章目录 1 前言2 DemoDemo 1 - 不使用函数Demo 2 - 使用函数 1 前言 在PPT展示或者博客创作中&#xff0c;有时需要插入动态图如GIF&#xff0c;来演示算法效果或者结果。在MATLAB中&#xff0c;可以通过一些代码&#xff0c;将绘图plot转化为动态的GIF。 其大致方法为&…

【MySQL】如何理解事务

一、引出事务 假设我们有一张用户表&#xff0c;如图所示&#xff1a; 我们现在的需求是&#xff1a;小红向小明转账100块 那么我们可以执行如下指令&#xff1a; update user set salary salary-100 where id1;//第一条语句小红转一百 update user set salary salary100 …

学习使用在mysql中查询指定字段字符串包含多个字符串的方法

学习使用在mysql中查询指定字段字符串包含多个字符串的方法 使用LIKE关键字使用REGEXP关键字使用FIND_IN_SET函数使用INSTR函数和AND关键字 使用LIKE关键字 SELECT * FROM table_name WHERE column_name LIKE %string1% AND column_name LIKE %string2%;使用LIKE关键字&#x…

RabbitMQ(一):消息队列MQ

目录 1 消息队列MQ1.1 MQ简介1、什么是MQ2、MQ的优势流量削峰应用解耦异常处理数据分发分布式事务 3、消息中间件的弊端4、常用的MQ 1.2 MQ中几个基本概念1.3 MQ的通信模式1.4 消息的发布策略1.5 常用消息中间件协议1、AMQP协议2、MQTT协议3、OpenMessage协议4、kafaka协议 1 消…

TiDB 社区智慧合集丨TiDB 相关 SQL 脚本大全

非常感谢各位 TiDBer 在之前 【TiDBer 唠嗑茶话会 48】非正式 TiDB 相关 SQL 脚本征集大赛&#xff01;( https://asktug.com/t/topic/996635 )里提供的各种常用脚本。 在这篇文章中&#xff0c;我们整理了社区同学提供的一系列 TiDB 相关 SQL 脚本&#xff0c;希望能为大家在…

APP被针对攻击了,要怎么解决

随着APP行业的兴起&#xff0c;游戏公司异军突起&#xff0c;不管是在控证还是攻击方面都是属于最复杂的一个场面&#xff0c;游戏APP逐渐成为DDOS流量攻击的“重灾区”。没有提前做好了解就盲目进军游戏APP行业&#xff0c;一旦被攻击就会让公司束手无策。那么&#xff0c;刚上…

OpenAI视频生成模型Sora的全面解析:从ViViT、Diffusion Transformer到NaViT、VideoPoet

前言 真没想到&#xff0c;距离视频生成上一轮的集中爆发(详见《Sora之前的视频生成发展史&#xff1a;从Gen2、Emu Video到PixelDance、SVD、Pika 1.0》)才过去三个月&#xff0c;没想OpenAI一出手&#xff0c;该领域又直接变天了 自打2.16日OpenAI发布sora以来(其开发团队包…

ubuntu20.04 安装 matlab R2023b

ubuntu20.04 使用matlab R2023b 起因步骤问题问题1问题2问题3 起因 闲着没事&#xff0c;想在ubuntu上安装matlab。 步骤 这个博客写得很好&#xff0c;我就不赘述了&#xff1a;参考博客 。但有点不一样&#xff1a;我现在matlab官网上下载的linux版本不是iso镜像文件&…

Redis实现滑动窗口限流

常见限流算法 固定窗口算法 在固定的时间窗口下进行计数&#xff0c;达到阈值就拒绝请求。固定窗口如果在窗口开始就打满阈值&#xff0c;窗口后半部分进入的请求都会拒绝。 滑动窗口算法 在固定窗口的基础上&#xff0c;窗口会随着时间向前推移&#xff0c;可以在时间内平滑控…