2021.08.09 P5018 对称二叉树(树形结构)

[P5018 NOIP2018 普及组] 对称二叉树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题意:

求一棵子树,关于该子树根节点轴对称的节点数最大。

分析:

暴力。

代码如下:

40tps

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std; const int N=1e6+10;
int n,val[N],ans;
struct node{
int l,r,flag,sum,val,size;
}a[N]; inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
void dfs(int x,int flag){
//fa[x]=f;dep[x]=dep[fa[x]]+1;
if(!x)return ;
//a[x].flag=flag;a[x].val=val[x];
//a[x].maxn=dep[x];
a[x].flag=flag;
a[x].sum=a[x].val=flag*a[x].val;
//a[x].val直接读入
a[x].size=1;
dfs(a[x].l,1);dfs(a[x].r,-1);
a[x].sum+=a[a[x].l].sum+a[a[x].r].sum;
//a[x].maxn=max(a[x].maxn,max(a[a[x].l].maxn,a[a[x].r].maxn));
a[x].size+=(a[a[x].l].size+a[a[x].r].size);
if(a[x].sum==a[x].val&&a[a[x].l].size==a[a[x].r].size&&a[a[x].l].sum==-a[a[x].r].sum)ans=max(ans,a[x].size);
} int main(){
n=read();
for(int i=1;i<=n;i++)a[i].val=read();
for(int i=1;i<=n;i++){
a[i].l=read();a[i].r=read();
if(a[i].l==-1)a[i].l=0;
if(a[i].r==-1)a[i].r=0;
//cout<<i<<" "<<a[i].l<<" "<<a[i].r<<endl;
}
dfs(1,1);
//for(int i=1;i<=n;i++)
//cout<<i<<" l "<<a[i].l<<" r "<<a[i].r<<" flag "<<a[i].flag<<" val "<<a[i].val<<" size "<<a[i].size<<" sum "<<a[i].sum<<endl;
cout<<ans;
return 0;
}

100tps

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std; const int N=1e6+10;
int n;
struct node{
int l,r,size,val;
}a[N]; inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
void dfs(int x){
a[x].size=1;
if(a[x].l)dfs(a[x].l),a[x].size+=a[a[x].l].size;
if(a[x].r)dfs(a[x].r),a[x].size+=a[a[x].r].size;
}
bool check(int x,int y){
if(!x&&!y)return true;
if(x&&y&&a[x].val==a[y].val&&check(a[x].l,a[y].r)&&check(a[x].r,a[y].l))
return true;
return false;
} int main(){
n=read();
for(int i=1;i<=n;i++)a[i].val=read();
for(int i=1;i<=n;i++){
a[i].l=read();a[i].r=read();
if(a[i].l==-1)a[i].l=0;
if(a[i].r==-1)a[i].r=0;
}
dfs(1);
int ans=0;
for(int i=1;i<=n;i++)if(check(a[i].l,a[i].r))ans=max(ans,a[i].size);
cout<<ans;
return 0;
}

2021.08.09 P5018 对称二叉树(树形结构)的更多相关文章

  1. 2021.08.06 P3478 STA-Station(树形结构)

    2021.08.06 P3478 STA-Station(树形结构) [P3478 POI2008]STA-Station - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 给 ...

  2. 2021.08.09 P5658 括号树(树形结构)

    2021.08.09 P5658 括号树(树形结构) [P5658 CSP-S2019] 括号树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 太长,在链接中. 分析及代码 ...

  3. 2021.08.09 P7238 迷失森林(树的直径)

    2021.08.09 P7238 迷失森林(树的直径) P7238 「DCOI」迷失森林 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.树的直径两种求法:两次dfs.树 ...

  4. 2021.08.09 P4868 Preprefix sum(树状数组)

    2021.08.09 P4868 Preprefix sum(树状数组) P4868 Preprefix sum - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 前缀和(pr ...

  5. 2021.08.09 P6037 Ryoku的探索(基环树)

    2021.08.09 P6037 Ryoku的探索(基环树) P6037 Ryoku 的探索 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.树的性质 2.基环树的性质 ...

  6. 2021.08.09 P6225 抑或橙子(树状数组)

    2021.08.09 P6225 抑或橙子(树状数组) 重点: 1.异或用法 题意: Janez 喜欢橙子!他制造了一个橙子扫描仪,但是这个扫描仪对于扫描的每个橙子的图像只能输出一个 3232 位整数 ...

  7. Luogu P5018 对称二叉树 瞎搞树&哈希

    我的天..普及组这么$hard$... 然后好像没有人用我的垃圾做法,,,好像是$O(n)$,但十分的慢,并且极其暴力$qwq$ 具体来说,就是直接$dfs$求出树高,然后想像出把原来的树补成满二叉树 ...

  8. 洛谷P5018 对称二叉树——hash

    给一手链接 https://www.luogu.com.cn/problem/P5018 这道题其实就是用hash水过去的,我们维护两个hash 一个是先左子树后右子树的h1 一个是先右子树后左子树的 ...

  9. P5018 对称二叉树题解

    题目内容链接: 那么根据题意,上图不是对称二叉树,只有节点7的子树是: 通俗来说,对称二叉树就是已一个节点x为根的子树有穿过x点的对称轴并且对称轴两边的对称点的大小也必须相等,那么这棵树就是对称二叉树 ...

随机推荐

  1. SQL注入之PHP+Mysql

    PHP+Mysql(GET方法+数值型+有错误回显)的注入方法 目标系统:PHP+MYSQL(GET方法+数值型+有错误信息) 环境说明: 后台地址:http://ip/cms/admin/login ...

  2. tomcat启动 ssm项目出现乱码的解决

    0.乱码产生原因:编码和解码的方式是不同 1.出现乱码的解决方式[推荐]: 在tomcat 的配置文件web.xml 中添加上请求编码过滤器: <!-- 请求编码过滤器 --> <f ...

  3. 浅谈systemd原理和应用

    多不说,直接上代码(可谓配置): [Unit] Description=demo app After=network-is-online.target [Service] Type=Simple Ex ...

  4. 迷宫问题,打印所有路径,深度搜索,dfs

    #include<iostream> using namespace std; int maze [5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0 ...

  5. 编写 Java 程序时, 如何在 Java 中创建死锁并修复它?

    经典但核心Java面试问题之一.如果你没有参与过多线程并发 Java 应用程序的编码,你可能会失败.

  6. 什么是 zuul路由网关?

    (1)Zuul 包含了对请求的路由和过滤两个最主要的功能:其中 责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础而过滤器功能则负 请求的处理过程进行干预,是实现请求校验.服务聚合等功 ...

  7. java的泛型hei

    泛型是一种未知的数据类型,当我们不知道使用什么数据类型的时候就可以使用泛型 泛型也可以看出是一个变量,用来接受数据类型 E e :Element 元素 T t: Type 类型 /* Collecti ...

  8. mysqlbench无法启动

    mysqlbean双击没有反应,应用无法启动,缺少3要素 都缺什么呢?看这个MySQL官方链接:https://dev.mysql.com/doc/workbench/en/wb-installing ...

  9. Spring ModelAttribute注解失效原因

    public String test(@RequestParam(value = "test") @ModelAttribute("test") String ...

  10. 学习FastDfs(四)

    1.简介 FastDFS 是一个开源的高性能分布式文件系统(DFS). 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡.主要解决了海量数据存储问题,特别适合以中小文件(建议范围: ...