洛谷 P5018 对称二叉树(搜索)
嗯...
题目链接:https://www.luogu.org/problem/P5018
其实这道题直接搜索就可以搜满分:
首先递归把每个点作为根节点的儿子的数量初始化出来,然后看这个节点作为根节点的那棵子树是不是对称的,然后在对称的子树中记录最大值。
AC代码:
#include<cstdio>
#include<iostream> using namespace std; struct node{
int l, r, v, len;
node() {l = -; r = -;}
} e[]; int n, ans; inline int dfs(int k){
e[k].len = ;
if(e[k].l != -) e[k].len += dfs(e[k].l);
if(e[k].r != -) e[k].len += dfs(e[k].r);
return e[k].len;
}//初始化子树大小 inline bool check(int ls, int rs){
bool p = ;
if(e[ls].v != e[rs].v) return false;
if((e[ls].l != - && e[rs].r == -) || (e[ls].l == - && e[rs].r != -) || (e[ls].r != - && e[rs].l == -) || (e[ls].r == - && e[rs].l != -)) return false;
if(e[ls].l != - && e[rs].r != -) p = p & check(e[ls].l, e[rs].r);
if(e[ls].r != - && e[rs].l != -) p = p & check(e[ls].r, e[rs].l);
return p;
}//判断是否对称 int main(){
scanf("%d", &n);
for(int i = ; i <= n; i++) scanf("%d", &e[i].v);
for(int i = ; i <= n; i++) scanf("%d%d", &e[i].l, &e[i].r);
dfs();
for(int i = ; i <= n; i++)
if(check(e[i].l, e[i].r)) ans = max(ans, e[i].len);
printf("%d\n", ans);
return ;
}
AC代码
洛谷 P5018 对称二叉树(搜索)的更多相关文章
- 洛谷P5018 对称二叉树——hash
给一手链接 https://www.luogu.com.cn/problem/P5018 这道题其实就是用hash水过去的,我们维护两个hash 一个是先左子树后右子树的h1 一个是先右子树后左子树的 ...
- 洛谷P5018 对称二叉树
不多扯题目 直接题解= = 1.递归 由题目可以得知,子树既可以是根节点和叶节点组成,也可以是一个节点,题意中的对称二叉子树是必须由一个根节点一直到树的最底部所组成的树. 这样一来就简单了,我们很容易 ...
- NOIP2018普及T4暨洛谷P5018 对称二叉树题解
题目链接:https://www.luogu.org/problemnew/show/P5018 花絮:这道题真的比历年的t4都简单的多呀,而且本蒟蒻做得出t4做不出t3呜呜呜... 这道题可以是一只 ...
- 【洛谷P5018 对称二叉树】
话说这图也太大了吧 这题十分的简单,我们可以用两个指针指向左右两个对称的东西,然后比较就行了 复杂度O(n*logn) #include<bits/stdc++.h> using name ...
- 洛谷 P5018 对称二叉树
题目传送门 解题思路: 先计算每个点的子树有多少节点,然后判断每个子树是不是对称的,更新答案. AC代码: #include<iostream> #include<cstdio> ...
- 2021.08.09 P5018 对称二叉树(树形结构)
2021.08.09 P5018 对称二叉树(树形结构) [P5018 NOIP2018 普及组] 对称二叉树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 求一棵子树,关 ...
- 洛谷 2921 记忆化搜索 tarjan 基环外向树
洛谷 2921 记忆化搜索 tarjan 传送门 (https://www.luogu.org/problem/show?pid=2921) 做这题的经历有点玄学,,起因是某个random题的同学突然 ...
- 【洛谷P5018】对称二叉树
题目大意:定义对称二叉树为每个节点的左右子树交换后与原二叉树仍同构的二叉树,求给定的二叉树的最大对称二叉子树的大小. 代码如下 #include <bits/stdc++.h> using ...
- 题解 洛谷P5018【对称二叉树】(noip2018T4)
\(noip2018\) \(T4\)题解 其实呢,我是觉得这题比\(T3\)水到不知道哪里去了 毕竟我比较菜,不大会\(dp\) 好了开始讲正事 这题其实考察的其实就是选手对D(大)F(法)S(师) ...
随机推荐
- web-css-文本
一.文本的水平对齐方式 使用text-align来设置文本的对齐方式:text-align的取值:left(向左对齐)/center(水平居中对齐)/right(向右对齐)/justify(两端对齐) ...
- 记一次和“N+1”的擦肩而过
这周五,就是昨天,部门走了3个人.他们是"被离职"的,从被通知到走人,只过了一周左右.一开始经理和他们谈的时候,说有没有赔偿不能确定,然后到周四左右,上面的人可能是等急了,才说年终 ...
- Spring AOP操作action时无法注入,报NullPointer异常
Spring AOP操作action时无法注入,报NullPointer异常当使用Spring AOP对action层进行操作时,会出现注入失败的问题,出现空指针异常.原因是一般struts2+spr ...
- 实现排行榜神器——redis zset
需求:假如现在需要搞个 “运动消耗卡路里排行榜”,例似微信步数排名,显示排名前20人的信息和消耗的卡里路,怎样实现排序? 一般思路:存储信息,然后数据库查询,排序?(假如有几十万人参与排名,这样查my ...
- HTML5-语义化
什么是语义化?就是用合理.正确的标签来展示内容,比如h1~h6定义标题. 语义化优点: 易于用户阅读,样式丢失的时候能让页面呈现清晰的结构. 有利于SEO,搜索引擎根据标签来确定上下文和各个关键字的权 ...
- 每天进步一点点------Allegro 手工布线时控制面板各选项说明
在进行手工布线过程中,最重要的就是对控制面板中的各个选项进行设置,因此首先介绍控制面板中各个选项的含义. 手工布线的命令为Route->connect,执行命令后,右侧控制面板如图8.14所示. ...
- Dockerfile书写介绍及构建ssh镜像、tomcat镜像、nginx镜像
=================================================================================================== ...
- Bootstrap入门(1)简介
作者:赵盼盼 出处:https://www.cnblogs.com/zhaopanpan/ Bootstrap是Twitter开源的基于HTML.CSS.JavaScript的前端框架. 它是为实现快 ...
- [AST Babel] Add function name into the console log 'path.findParent(t.isFunctionDeclaration)'
Continue with the previous post: https://www.cnblogs.com/Answer1215/p/12337243.html What we want to ...
- dw 快捷键
<html></html> 创建一个HTML文档<head></head> 设置文档标题和其它在网页中不显示的信息<title></t ...