洛谷:P5018 对称二叉树 ← NOIP2018 普及组T4

news2025/2/21 22:50:54

【题目来源】
https://www.luogu.com.cn/problem/P5018
https://www.acwing.com/problem/content/478/

【题目描述】
一棵有点权的有根树如果满足以下条件,则被轩轩称为对称二叉树:
1.二叉树;
2.将这棵树所有节点的左右子树交换,新树和原树对应位置的结构相同且点权相等。
下图中节点内的数字为权值,节点外的 id 表示节点编号。


备注:图片来源于洛谷 https://www.luogu.com.cn/problem/P5018

现在给出一棵二叉树,希望你找出它的一棵子树,该子树为对称二叉树,且节点数最多。请输出这棵子树的节点数。
注意:只有树根的树也是对称二叉树。本题中约定,以节点 T 为子树根的一棵“子树”指的是:节点T和它的全部后代节点构成的二叉树。

【输入格式】
第一行一个正整数 n,表示给定的树的节点的数目,规定节点编号1∼n,其中节点 1 是树根。
第二行 n 个正整数,用一个空格分隔,第 i 个正整数 vi 代表节点 i 的权值。
接下来 n 行,每行两个正整数 li,ri,分别表示节点 i 的左右孩子的编号。如果不存在左/右孩子,则以 −1 表示。两个数之间用一个空格隔开。

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

【数据范围】
vi≤1000,n≤10^6

【输入输出样例】

input:
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

output:
3

【样例解析】
根据上述样例所得的二叉树如下所示。可知最大的对称二叉子树为以节点 7 为树根的子树,节点数为 3。


 备注:图片来源于洛谷 https://www.luogu.com.cn/problem/P5018

【算法代码】

#include<bits/stdc++.h>
using namespace std;

const int maxn=1e6+5;
int v[maxn],lid[maxn],rid[maxn];
int ans;

bool flag=0;
int getN(int x,int y) {
    if(x==-1 && y==-1) return 0;
    if(x==-1 || y==-1 || v[x]!=v[y]) {
        flag=1;
        return 0;
    }
    return getN(lid[x],rid[y])+getN(rid[x],lid[y])+2;
}

int main() {
    int n;
    cin>>n;
    for(int i=1; i<=n; i++) cin>>v[i];
    for(int i=1; i<=n; i++) cin>>lid[i]>>rid[i];
    for(int i=1; i<=n; i++) {
        flag=false;
        int sum=getN(lid[i],rid[i])+1;
        if(!flag) ans=max(ans,sum);
    }
    cout<<ans;
    return 0;
}


/*
in:
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

out:
3
*/





【参考文献】
https://blog.csdn.net/qq_41431457/article/details/89339153
https://www.acwing.com/solution/content/133039/

https://www.acwing.com/solution/content/20417/

 

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

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

相关文章

关于Python的Numpy库reshape()函数的用法

1.介绍 更改数组的形状&#xff0c;不改变原数组 2.语法 a np.reshape(mat, newshape, order ‘C’) a : newshape形状的新数组 mat : 原数组 newshape&#xff1a;(1, 2)/ 1, 2 都可以改为1行2列的数组 order&#xff1a;读取原数组的规则&#xff0c;默认为C&#xff08;…

Go语言精进之路读书笔记—第三章 声明、类型、语句与控制结构(五)map

map 是啥&#xff1f; 无序的 key value 键值对。 创建变量有两种方式&#xff1a; 基本操作&#xff1a; 插入数据&#xff1a; 获取数据&#xff1a; 查找和数据读取&#xff1a; comma ok 查找法, 被称为最佳实践。 获取value 删除数据 遍历数据 想要有序的需要这样做&a…

CSS 沿着同一个方向旋转

主要解决旋转360后倒转的问题&#xff0c;沿着一个方向旋转&#xff0c;而不是倒回去重新开始。 效果 源码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>同方向旋转</title><script src"https://dp.rc1…

【STM32MP135】修复EMMC模式启动时,uboot启动识别为usb0设备问题

文件路径&#xff1a;u-boot-stm32mp-v2021.10-stm32mp1-r1/arch/arm/dts/stm32mp135d-atk.dts 文件路径&#xff1a;u-boot-stm32mp-v2021.10-stm32mp1-r1/configs/stm32mp13_defconfig

ChatGLM 实践赛之学术工具创意开发丨智谱 AI × 和鲸科技

2022 年底以来&#xff0c;LLM 大规模语言模型备受瞩目。今年 3 月中旬&#xff0c;智谱 AI 与清华大学强强联合&#xff0c;重磅发布了 ChatGLM-6B 开源模型。截止 6 月 24 日&#xff0c;该模型的下载量超过三百万人次&#xff0c;并在 Hugging Face&#xff08;HF&#xff0…

jdbc中jdbcTemplate的事务问题

jdbcTemplate的增删改都用 update 查询用queryForList 1. 2. 3.虽然事务未提及也可以查到对应的数据

优思学院|六西格玛全面入门指南

I. 引言 六西格玛的定义 六西格玛&#xff08;Six Sigma&#xff09;是一种基于数据、以客户为导向、不断改进的方法论&#xff0c;用于提高组织中过程和产品的质量。六西格玛旨在消除缺陷&#xff0c;减少过程中的变异性&#xff0c;从而提高客户体验&#xff0c;并增加组织…

pip install visdom时报错

在envs所在环境下pip install visdom报如下错误&#xff1a; 解决方法&#xff0c;换源&#xff1a; pip install visdom -i https://pypi.tuna.tsinghua.edu.cn/simple

基于Web的社区医院管理服务系统

本次设计任务是要设计一个社区医院管理服务系统&#xff0c;通过这个系统能够满足社区医院管理服务的管理及医生和用户的社区医院管理服务功能。系统的主要功能包括首页、个人中心、用户管理、医生管理、预约医生管理、就诊信息管理、诊疗方案管理、病历信息管理、健康档案管理…

Vue3 使用vue-seamless-scroll 轮播组件报错问题解决

1、npm安装组件 npm install vue3-seamless-scroll --save 全局注册 import { createApp } from vue;import App from ./App.vue;import vue3SeamlessScroll from "vue3-seamless-scroll";const app createApp(App);app.use(vue3SeamlessScroll);app.mount(#app); …

ChatGPT驱动虚拟主播(2)语音驱动图片数字人

整个流程是这样的 。你说话的 语音-->语音转为文字 -->chatgpt --> 文字转为语音-->驱动虚拟主播。 前面的流程都是非常多的参考代码。下面代码就是教你如果做到这一步。这个虚拟主播是可用wav格式音频驱动虚拟主播的。代码是一个http接口&#xff0c;上传wav文件…

traceId跟踪请求全流程日志

一个系统被拆分成N多个模块&#xff0c;这些模块负责不同的功能&#xff0c;组合成一套系统&#xff0c;最终可以提供丰富的功能。在这种分布式架构中&#xff0c;一次请求往往需要涉及到多个服务&#xff0c;如下图&#xff1a; 服务之间的调用错综复杂&#xff0c;对于维护的…

vue路由传递对象数组,打印数据 [object Object] 解决方法

1、router路由传参一般两种方式。一种是query传参&#xff0c;另外一种则是params传参。由于params传参刷新页面&#xff0c;会导致数据丢失。所以采用query传参方式比较多&#xff0c;但当使用query传递对象&#xff0c;数组时&#xff0c;刷新页面会报[object Object]&#x…

J. Not Another Path Query Problem

Problem - J - Codeforces 思路&#xff1a;因为我们要让路径的与大于等于V&#xff0c;假设某个路径的与为S&#xff0c;存在两种可能&#xff0c;一种是SV&#xff0c;另一种可能是在第i个位置V的二进制为零&#xff0c;而S的二进制为1&#xff0c;且前i-1个二进制是相等的。…

FLAC格式如何转换为MP3?分享三种方法!

在数字音乐的世界中&#xff0c;FLAC和MP3是两种常见的音频格式。FLAC (Free Lossless Audio Codec)提供无损的音质&#xff0c;但文件大小较大。而MP3文件较小&#xff0c;更易于传输和保存&#xff0c;但可能牺牲一些音质。如果你想将FLAC音频转换成MP3格式&#xff0c;本文将…

【算法】数位DP

文章目录 数位DP前置知识——位运算与集合论 例题——2376. 统计特殊整数思路代码模板&#xff08;重要&#xff01;⭐⭐⭐⭐⭐&#xff09;针对这道题&#xff0c;可以去掉 isNum 参数 相关题目练习233. 数字 1 的个数⭐⭐⭐⭐⭐代码模板修改——记录cnt&#xff08;前面已经选…

Docker(三)之容器管理工具 Docker生态架构及部署

容器管理工具Docker生态架构及部署 一、Docker生态架构 1.1 Docker Containers Are Everywhere 1.2 生态架构 1.2.1 Docker Host 用于安装Docker daemon的主机&#xff0c;即为Docker Host&#xff0c;并且该主机中可基于容器镜像运行容器。 1.2.2 Docker daemon 用于管理…

基础篇-STM32初体验

MDK5编译例程 串口下载程序 DAP下载程序 DAP调试程序

多领域入选!棱镜七彩上榜《嘶吼2023网络安全产业图谱》

2023年7月10日&#xff0c;国内网络安全行业第三方研究机构嘶吼安全产业研究院联合国家网络安全产业园区&#xff08;通州园&#xff09;正式发布《嘶吼2023网络安全产业图谱》&#xff0c;棱镜七彩凭借在开源安全领域的创新性及服务能力&#xff0c;上榜开发与应用、应用于产业…

解决2003-Host‘ ‘is not allowed to connect to this MySQL server,实现远程连接本地数据库

目录 1.打开终端控制面板 2.进入mysql库 3.执行更新权限语句 4.查看权限 5.刷新服务器配置 6.进入Navict测试连接 在使用Navicat远程连接本地数据库时&#xff0c;遇到了这样一个问题&#xff0c; 我使用 本地主机的地址&#xff0c;连接本地的数据库&#xff0c;报错host…