当前位置: 首页 > news >正文

[NOIP2018 PJ T4]对称二叉树

题目大意:问一棵有根带权二叉树中最大的对称二叉树子树,对称二叉树为需满足将这棵树所有节点的左右子树交换,新树和原树对应位置的结构相同且点权相等。

题解:在对称二叉树中,对于深度相同的两个节点$u,v$,必定有$ls(u)=rs(v)$,$rs(u=ls(v)$,并且$val(u)=val(v)$,对每个点跑一遍深搜就可以了。发现跑一个点最多遍历它子树中较少的一棵子树。复杂度为$O(n\log_2n)$

卡点:

 

C++ Code:

#include <iostream>
#define maxn 1000010
#define ls(u) son[0][u]
#define rs(u) son[1][u]
int N, n, ans;
int V[maxn], son[2][maxn], sz[maxn];
bool check(int u, int v) {
	if (!~u && !~v) return true;
	if (~u && ~v && V[u] == V[v] && check(ls(u), rs(v)) && check(rs(u), ls(v))) return true;
	return false;
}
void dfs(int u) {
	sz[u] = 1;
	if (~ls(u)) dfs(ls(u)), sz[u] += sz[ls(u)]; 
	if (~rs(u)) dfs(rs(u)), sz[u] += sz[rs(u)]; 
}
int main() {
	std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);
	std::cin >> n;
	for (int i = 1; i <= n; ++i) std::cin >> V[i];
	for (int i = 1; i <= n; ++i) std::cin >> ls(i) >> rs(i);
	dfs(1);
	for (int i = 1; i <= n; ++i)
		if (check(ls(i), rs(i))) ans = std::max(ans, sz[i]);
	std::cout << ans << '\n';
	return 0;
}

  

转载于:https://www.cnblogs.com/Memory-of-winter/p/11076938.html

相关文章:

  • 移动互联网时代的人才管理新思维之学习笔记
  • Codeforces Round #159 (Div. 2) B. Playing Cubes
  • Gridview常用技巧
  • Open xml 操作Excel 透视表(Pivot table)-- 实现Excel多语言报表
  • Delphi 数据类型列表
  • 在struts1.1框架下,利用smartupload实现文件的上传(可以是多个文件)
  • [转帖]三星F488E的JAVA安装方法
  • UICheckBox 用法解析
  • MySQL笔记系列:数据库概述
  • JOIN 和 WHERE?简单的问题也有学问。
  • 图像替换技术
  • WCF 第四章 绑定 创建一个自定义绑定
  • 健康小常识
  • 似水流年 ? Chrome调试大全
  • 关于gulp复制文件时把整个目录结构都复制的问题解决
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • Android交互
  • Angular4 模板式表单用法以及验证
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • Fastjson的基本使用方法大全
  • Flex布局到底解决了什么问题
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • Iterator 和 for...of 循环
  • LintCode 31. partitionArray 数组划分
  • mongo索引构建
  • PHP变量
  • PHP那些事儿
  • RxJS: 简单入门
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • swift基础之_对象 实例方法 对象方法。
  • Theano - 导数
  • windows下mongoDB的环境配置
  • 编写符合Python风格的对象
  • 从setTimeout-setInterval看JS线程
  • 电商搜索引擎的架构设计和性能优化
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 目录与文件属性:编写ls
  • 区块链共识机制优缺点对比都是什么
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 如何用vue打造一个移动端音乐播放器
  • 微信小程序填坑清单
  • 延迟脚本的方式
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • (07)Hive——窗口函数详解
  • (30)数组元素和与数字和的绝对差
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (MATLAB)第五章-矩阵运算
  • (ZT)一个美国文科博士的YardLife
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (接口自动化)Python3操作MySQL数据库
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (学习日记)2024.01.09
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)