首页 > 其他分享 >[hdu6647]Bracket Sequences on Tree 解题报告

[hdu6647]Bracket Sequences on Tree 解题报告

时间:2024-03-31 21:11:21浏览次数:27  
标签:rt 子树 Part Tree 子树外 Bracket 为根 哈希 Sequences

oj:https://gxyzoj.com/d/hzoj/p/3575

因为自己的脑残原因,调了8个小时啊!!!

切入正题

Part 1

假定1为根,可以发现,如果u的两棵子树同构,则他们遍历的顺序不影响答案

所以,就可以将子树按哈希值分类,这道题就变成了一个可重复组合问题,

设\(f_i\)表示以1为根时i的方案数,\(a_i\)表示某一种哈希值的个数,\(cnt_u\)表示u的子节点数,式子:

\[f_u=\dfrac{cnt_u!}{\prod_{i=1} a_i} \times \prod_{v\in son(u)} f_v \]

Part 2

若以两个节点i,j为根,两棵树同构,则方案不能重复计算,所以考虑计算以每个节点为根的哈希值

因为n很大,所以不能暴力,考虑树形dp

分为子树外的贡献和子树内的贡献,子树外的显然是父亲为根的贡献\(rt_{fa}\)减去该点所在子树的贡献,子树内的则可以直接dfs求解

所以:rt[u]=h[u]+get_hash(rt[fa]-get_hash(h[u]));

Part 3

接着考虑,因为n很大,所以不能像第一部分一样暴力跑所有点,考虑树形dp

思路和第二部分很像,分为子树内和子树外考虑

先考虑子树外

标签:rt,子树,Part,Tree,子树外,Bracket,为根,哈希,Sequences
From: https://www.cnblogs.com/wangsiqi2010916/p/18107254

相关文章

  • 客快物流大数据项目(九十三):ClickHouse的ReplacingMergeTree深入了解 ClickHouse清除重
    ​ClickHouse的ReplacingMergeTree深入了解为了解决MergeTree相同主键无法去重的问题,ClickHouse提供了ReplacingMergeTree引擎,用来对主键重复的数据进行去重。删除重复数据可以使用optimize命令手动执行,这个合并操作是在后台运行的,且无法预测具体的执行时间。在使用optimize命......
  • 【前端】- 在使用Element UI 的el-tree组件时,从底层去研究如何去实现一键展开/关闭【t
    第一步:首先我们先去查看elementui官方文档,发现并没有提供这个方法,没办法,只能手写一个了,先给大家看看功能点击前效果:点击后效果:第二步:废话不多说直接上代码,然后我们简单解释下代码页面部分:这里是简单的数结构渲染,不多讲,$refs.Reftree获取的是el-tree的实例,具体作用请看下......
  • F. 0, 1, 2, Tree!
    原题链接题解1.模拟+贪心,我们一个一个点添加,一层一层遍历,每个节点对当前层的接口数的贡献是-1如果是节点2,对下一层接口数贡献为2,节点1贡献为1如果当前层接口数用完了就下一层,初始值层0设为1在时间复杂度合理的情况下无所不用其极code#include<bits/stdc++.h>#definelllo......
  • 【容器源码篇】Set容器(HashSet,LinkedHashSet,TreeSet的特点)
    文章目录⭐容器继承关系......
  • Ant Design Vue Tree 选中子节点同时半选中父级节点
    需要实现的效果:1、子菜单如果不是全部选中,一级菜单半选。2、子菜单全选,一级菜单选中。3、一级菜单选择,二级菜单全选。4、没有二级菜单,则只控制一级菜单。主要用到的属性是checked和halfCheckedKeys,通过手动控制那些菜单选中,那些半选中实现功能。**页面截图:**完整代码如......
  • 【Bitmap Index】B-Tree索引与Bitmap位图索引的锁代价比较研究
    通过以下实验,来验证Bitmap位图索引较之普通的B-Tree索引锁的“高昂代价”。位图索引会带来“位图段级锁”,实际使用过程一定要充分了解不同索引带来的锁代价情况。1.为比较区别,创建两种索引类型的测试表1)在表t_bitmap上创建位图索引SEC@ora11g>createtablet_bitmap(idnumber(1......
  • 58.容器_TreeMap容器的使用
    TreeMap容器的使用TreeMap和HashMap同样实现了Map接口,所以,对于API的用法来说是没有区别的。HashMap效率高于TreeMap;TreeMap是可以对键进行排序的一种容器,在需要对键排序时可选用TreeMap。TreeMap底层是基于红黑树实现的。在使用TreeMap时需要给定排序规则:元素自身实现比较规......
  • [669] Trim a Binary Search Tree
    极其少有的我决定自己来写一篇。我就是个脑残真的,我还在想要不要一个个pop,结果忘了这是一个BST……妈个鸡附上我的傻逼代码/**@lcapp=leetcode.cnid=669lang=cpp**[669]TrimaBinarySearchTree*/#include"General.h"structTreeNode{intval;Tr......
  • 树 Tree
    2024.3.21芝士wa参考视频:数据结构-树“种一棵树,最好的时间是十年前,其次是现在”树的定义树是由n(n≥0)个结点组成的有限集合。如果n=0,称为空树;如果n>0,则有一个特定的称之为根(root)的结点,它只有直接后继,但没有直接前驱;除根以外的其他结点划分为m(m≥0)个......
  • 我什么时候应该使用TreeMap 而不是 PriorityQueue?反之亦然?
    引子之前周赛(第390场周赛记录-快手)时遇到一题(题干描述见下图,实现代码见周赛记录),需要保持容器元素的动态有序(即随着插入删除操作后列表始终是有序的)。尝试过很多数据结构或方案,如列表存储然后手动调用Arrays.sort()进行排序、使用优先队列实现大/小根堆的方式,但无一例外全部超时......