给一手链接 https://www.luogu.com.cn/problem/P5018

这道题其实就是用hash水过去的,我们维护两个hash

一个是先左子树后右子树的h1

一个是先右子树后左子树的h2

如果一个点,他的左子树的h1==右子树的h2

那么以这个点为根的树就是对称二叉树了

TIPS:hash的顺序至关重要!

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<iostream>
#define LL long long
using namespace std;
const int M=2e6+,mod=;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
int n,ans=;
int l[M],r[M],h[M];
LL v1[M],v2[M];
void dfs(int x){
if(l[x]!=-){
dfs(l[x]); h[x]+=h[l[x]];
v1[x]=(v1[x]*+v1[l[x]]*)%mod;
}
if(r[x]!=-){
dfs(r[x]); h[x]+=h[r[x]];
v1[x]=(v1[x]*+v1[r[x]]*)%mod;
v2[x]=(v2[x]*+v2[r[x]]*)%mod;
}
if(l[x]!=-) v2[x]=(v2[x]*+v2[l[x]]*)%mod;
if(l[x]!=-&&r[x]!=-&&v1[l[x]]==v2[r[x]]) ans=max(ans,h[x]);
}
int main(){
//freopen("1.txt","r",stdin);
n=read();
for(int i=;i<=n;i++) h[i]=,v1[i]=read(),v2[i]=v1[i];
for(int i=;i<=n;i++) l[i]=read(),r[i]=read();
dfs();
printf("%d\n",ans);
return ;
}

洛谷P5018 对称二叉树——hash的更多相关文章

  1. 洛谷P5018 对称二叉树

    不多扯题目 直接题解= = 1.递归 由题目可以得知,子树既可以是根节点和叶节点组成,也可以是一个节点,题意中的对称二叉子树是必须由一个根节点一直到树的最底部所组成的树. 这样一来就简单了,我们很容易 ...

  2. NOIP2018普及T4暨洛谷P5018 对称二叉树题解

    题目链接:https://www.luogu.org/problemnew/show/P5018 花絮:这道题真的比历年的t4都简单的多呀,而且本蒟蒻做得出t4做不出t3呜呜呜... 这道题可以是一只 ...

  3. 洛谷 P5018 对称二叉树(搜索)

    嗯... 题目链接:https://www.luogu.org/problem/P5018 其实这道题直接搜索就可以搜满分: 首先递归把每个点作为根节点的儿子的数量初始化出来,然后看这个节点作为根节点 ...

  4. 【洛谷P5018 对称二叉树】

    话说这图也太大了吧 这题十分的简单,我们可以用两个指针指向左右两个对称的东西,然后比较就行了 复杂度O(n*logn) #include<bits/stdc++.h> using name ...

  5. 洛谷 P5018 对称二叉树

    题目传送门 解题思路: 先计算每个点的子树有多少节点,然后判断每个子树是不是对称的,更新答案. AC代码: #include<iostream> #include<cstdio> ...

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

    2021.08.09 P5018 对称二叉树(树形结构) [P5018 NOIP2018 普及组] 对称二叉树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 求一棵子树,关 ...

  7. 【洛谷P5018】对称二叉树

    题目大意:定义对称二叉树为每个节点的左右子树交换后与原二叉树仍同构的二叉树,求给定的二叉树的最大对称二叉子树的大小. 代码如下 #include <bits/stdc++.h> using ...

  8. 题解 洛谷P5018【对称二叉树】(noip2018T4)

    \(noip2018\) \(T4\)题解 其实呢,我是觉得这题比\(T3\)水到不知道哪里去了 毕竟我比较菜,不大会\(dp\) 好了开始讲正事 这题其实考察的其实就是选手对D(大)F(法)S(师) ...

  9. [洛谷P1040] 加分二叉树

    洛谷题目链接:加分二叉树 题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,-,n),其中数字1,2,3,-,n为节点编号.每个节点都有一个分数(均为正整数),记第i个节点的分数为di ...

随机推荐

  1. linux配置 sudo 授权管理

    为什么使用 sudo,如果普通用户使用 su - root 切换到管理员.进行非法操作,比如 passwd root 修改 root 密码.那么系统其他用户将无法访问系统.这个普通管理员说白了,已经” ...

  2. Sql server 启用调试

    在SQL Server 2008管理平台上,调试2005的数据库,会报错. 用 SQL Server 2008管理平台,调试本机数据库,当登录服务器名为“.”的时候也会报错.   解决方法,暂时使用S ...

  3. 10-基于TMS320C6678+XC7K325T的6U CPCI Full Camera Link图像处理平台

    基于TMS320C6678+XC7K325T的6U CPCI Full Camera Link图像处理平台 1.板卡概述 板卡由我公司自主研发,基于6UCPCI架构,处理板包含一片TI DSPTMS3 ...

  4. php session生存周期

    今天在我的微博(Laruence)上发出一个问题: 我在面试的时候, 经常会问一个问题: “如何设置一个30分钟过期的Session?”, 大家不要觉得看似简单, 这里面包含的知识挺多, 特别适合考察 ...

  5. Final修饰的字段是否可以通过反射设置值

    案发现场 经常听说final修饰的字段是常量不能改变的他的值,但是以外发现 Integer.java源码中的字段“value”是final,但是可以通过反射改变他的值. public final cl ...

  6. 程序员要注意!现在是RSS复兴的时候了

    一般来说,现代网络不乏恐怖,从无所不在的网络黑客到所有信息平台,再到各大平台的评论系统.不幸的是,我们建立的这个互联网并没有什么灵丹妙药.但任何人都厌倦了黑箱算法,控制你在网上看到的东西,一直存在但始 ...

  7. 【leetcode】1051. Height Checker

    题目如下: Students are asked to stand in non-decreasing order of heights for an annual photo. Return the ...

  8. // 62.是否有利润奖--lrj private boolean isProfitsAward; // 63.利润奖--lrj_price private String profitsAward;

    // 62.是否有利润奖--lrj private boolean isProfitsAward; // 63.利润奖--lrj_price private String profitsAward; ...

  9. ORACLE数据库 memory_target SGA 大小

    修改 memory_target 用oracle用户登录,sqlplus "/as sysdba"SQL> show parameters target;     show ...

  10. Tomcat的配置文件server.xml叙述

    元素名属性解释 server port 指定一个端口,这个端口负责监听关闭tomcat的请求shutdown  指定向端口发送的命令字符串 servicename          指定service ...