2021.08.09 P5018 对称二叉树(树形结构) [P5018 NOIP2018 普及组] 对称二叉树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 求一棵子树,关于该子树根节点轴对称的节点数最大. 分析: 暴力. 代码如下: 40tps #include<cstdio> #include<iostream> #include<algorithm> using namespace std; const int N=1e6+10; in…
2021.08.06 P3478 STA-Station(树形结构) [P3478 POI2008]STA-Station - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 给定一个 nn 个点的树,请求出一个结点,使得以这个结点为根时,所有结点的深度之和最大. 一个结点的深度之定义为该节点到根的简单路径上边的数量. 分析: 设x的父节点为y,则根节点从y移到x: \[f[x]=f[y]-size[x]+(n-size[x]) \\ f[x]=f[y]+n-2*szie[…
2021.08.09 P5658 括号树(树形结构) [P5658 CSP-S2019] 括号树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 太长,在链接中. 分析及代码: //从一条链开始思考,得出num[x]=num[fa[x]]+1,sum[x]=sum[fa[x]]+num[x] //接下来思考是一棵树的情况:只是比一条链多了回溯 #include<cstdio> #include<algorithm> #include<iostream…
2021.08.09 P7238 迷失森林(树的直径) P7238 「DCOI」迷失森林 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.树的直径两种求法:两次dfs.树形dp 题意: 首先给出一棵以 11 为根,nn 个结点的树,定义为「单位树」. 现有 nn 个结构与「单位树」完全相同的树,要将 nn 个树再用 n-1n−1 条边连接起来. 为方便叙述,用符号 (a,b)(a,b) 表示结点 aa 所代表树中,编号为 bb 的结点. 连接方式如下: 将 nn 棵…
2021.08.09 P4868 Preprefix sum(树状数组) P4868 Preprefix sum - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 前缀和(prefix sum): \[S_i=\sum_{k=1}^i a_k \] 前前缀和(preprefix sum) 则把S_i作为原序列再进行前缀和.记再次求得前缀和第i个是SS_i 给一个长度n的序列a1,a2,⋯,a**n*,有两种操作: Modify i x:把a_i改成x: Query i:查…
2021.08.09 P6037 Ryoku的探索(基环树) P6037 Ryoku 的探索 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.树的性质 2.基环树的性质 题意: Ryoku 所处的世界可以抽象成一个有 nn 个点, nn 条边的带权无向连通图 GG.每条边有美观度和长度. Ryoku 会使用这样一个策略探索世界:在每个点寻找一个端点她未走过的边中美观度最高的走,如果没有边走,就沿着她前往这个点的边返回,类似于图的深度优先遍历. 探索的一个方案的长度是…
2021.08.09 P6225 抑或橙子(树状数组) 重点: 1.异或用法 题意: Janez 喜欢橙子!他制造了一个橙子扫描仪,但是这个扫描仪对于扫描的每个橙子的图像只能输出一个 3232 位整数. 他一共扫描了 nn 个橙子,但有时他也会重新扫描一个橙子,导致这个橙子的 3232 位整数发生更新. Janez 想要分析这些橙子,他觉得异或操作非常有趣,他每次选取一个区间从 ll 至 uu,他想要得到这个区间内所有子区间的异或和的异或和. 例如 l=2,u=4l=2,u=4 的情况,记橙子序…
我的天..普及组这么$hard$... 然后好像没有人用我的垃圾做法,,,好像是$O(n)$,但十分的慢,并且极其暴力$qwq$ 具体来说,就是直接$dfs$求出树高,然后想像出把原来的树补成满二叉树的形态 $like\space this:$ 震不震惊$qwq$ 然后对子树哈希,同时保存正向的哈希值$h1[u]$和反向的哈希值$h2[u]$(对称时用).但每次向上合并时要乘的是$Base^{sz+0/1}$,其中$sz=$子树所形成的完全二叉树的大小. 这样哈希值既可以表示点位置(不同的位置点…
给一手链接 https://www.luogu.com.cn/problem/P5018 这道题其实就是用hash水过去的,我们维护两个hash 一个是先左子树后右子树的h1 一个是先右子树后左子树的h2 如果一个点,他的左子树的h1==右子树的h2 那么以这个点为根的树就是对称二叉树了 TIPS:hash的顺序至关重要! #include<cstdio> #include<iostream> #include<cstring> #include<algorith…
题目内容链接: 那么根据题意,上图不是对称二叉树,只有节点7的子树是: 通俗来说,对称二叉树就是已一个节点x为根的子树有穿过x点的对称轴并且对称轴两边的对称点的大小也必须相等,那么这棵树就是对称二叉树. 思路也很简单:递归处理每个节点的子树的节点数size,然后枚举每一个节点的子树来判断是否为对称二叉树.如果一边有节点另一边没有就return剪枝,一旦碰到不一样的节点就剪枝. 特别的,单个节点也是一个对称二叉树. 代码: #include<iostream> #include<cstdi…