题目传送门

解题思路:

先计算每个点的子树有多少节点,然后判断每个子树是不是对称的,更新答案。

AC代码:

 #include<iostream>
#include<cstdio> using namespace std; struct kkk{
int l,r,v,len;
kkk() {l = -;r = -;}
}e[];
int n,ans; bool solve(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 & solve(e[ls].l,e[rs].r);
if(e[ls].r != - && e[rs].l != -)
p = p & solve(e[ls].r,e[rs].l);
return p;
} 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;
} 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(solve(e[i].l,e[i].r))
ans = max(ans,e[i].len);
printf("%d",ans);
return ;
}

//NOIP普及2018 T4

最新文章

  1. 【C#进阶系列】29 混合线程同步构造
  2. [moka同学转载]Yii2 中国省市区三级联动
  3. bzoj 2738 矩阵乘法
  4. Asp.Net远程调试
  5. 淘宝(阿里百川)手机客户端开发日记第六篇 Service详解(六)
  6. ueditor编辑器图片自定义存放目录及路径修改
  7. 用C++实现斐波那契数列
  8. php笔记(七)PHP类于对象之多态
  9. 使用了UnityEditor中的API,打包时却不能打包UnityEditor的问题
  10. Javascript 数组(Array)相关内容总结
  11. PAGELATCH_x 等待--转载
  12. OpenStack-Neutron-VPNaaS-代码
  13. mysql_pconnect 问题
  14. Oracle 数据库监听配置和服务
  15. [Spark][Python]DataFrame where 操作例子
  16. redis 一主二从三哨兵
  17. ubuntu + usb转RS232驱动
  18. 专访姚冬:All-in-One,智能时代下企业需要更快速的变革
  19. Centos7编译安装zabbix-4.0.1
  20. elasticsearch.in.sh优化内存

热门文章

  1. 5分钟搞懂:session与cookie
  2. JavaWeb学习记录
  3. EUI库 - 9 - 数据集合 - 列表
  4. h5-360_introduce页面案例
  5. 当chart图遇上bootstrap的TAB切换 无宽高问题?
  6. C++命名规范——谷歌规范
  7. 吴裕雄--天生自然Django框架开发笔记:Django 表单
  8. Android自定义View——多边形网格属性图
  9. iOS如何禁用长按页面弹出菜单
  10. English Words and Expressions