(CSP2019模拟)DTOJ 4624. 树
题意
给定一棵 n n n 个结点的树,共有 q q q 次询问。
第 i i i 次询问首先包含了三个数 k i , m i , r i k_i,m_i,r_i ki,mi,ri ,接着给定了树上互不相同的 k i k_i ki 个关键点 a i , 1 , a i , 2 , … , a i , k a_{i, 1}, a_{i, 2}, \dots, a_{i, k} ai,1,ai,2,…,ai,k 。对于第
i i i次询问,你需要回答当这棵树以 r i r_i ri 为根时,你有多少种方案将这 k i k_i ki 个点分为至多 m i m_i mi 组,使得同一组内的任意两个不同的结点都不存在祖先关系。
对于第 i i i 次询问,假设你一共将 k i k_i ki 个点分成了 p p p 组,那么分组的方案需要满足:
- 给出的 k i k_i ki 个点中每个点属于且仅属于 p p p 组中的其中一组。
- p p p 组中的任意一组都要至少包含一个结点。
对于第 i i i 次询问,两个分组的方案不同,当且仅当它们分出的组数不同,或者存在两个点 a i , x , a i , y ( x ≠ y ) a_{i, x}, a_{i, y}(x \neq y) ai,x,ai,y(x=y) ,它
们在其中一种分组方案中被分到了同一组,在另一种分组方案中没有被分到同一组。
数据范围:
对于 20% 的数据, n ≤ 10 , ∑ k i ≤ 20 , m i ≤ min ( 4 , k i ) n \leq 10, \sum k_{i} \leq 20, m_{i} \leq \min \left(4, k_{i}\right) n≤10,∑ki≤20,mi≤min(4,ki) ;
对于 60% 的数据, n ≤ 1 0 4 , ∑ k i ≤ 1 0 4 , m i ≤ min ( 50 , k i ) n \leq 10^{4}, \sum k_{i} \leq 10^{4}, m_{i} \leq \min \left(50, k_{i}\right) n≤104,∑ki≤104,mi≤min(50,ki) ;
对于另外 20% 的数据,保证第 i i i 条边是 ( 1 , i + 1 ) (1,i+1) (1,i+1) ,并且对于每个询问 r i = 1 r_i=1 ri=1;
对于 100% 的数据, n ≤ 1 0 5 , q ≤ 1 0 5 , ∑ k i ≤ 1 0 5 , 1 ≤ u , v ≤ n n \leq 10^{5}, q \leq 10^{5}, \sum k_{i} \leq 10^{5}, 1 \leq u, v \leq n n≤105,q≤105,∑ki≤105,1≤u,v≤n 。
对于每个询问, 1 ≤ k i , r i ≤ n , 1 ≤ m i ≤ min ( 300 , k i ) 1 \leq k_{i}, r_{i} \leq n, 1 \leq m_{i} \leq \min \left(300, k_{i}\right) 1≤ki,ri≤n,1≤mi≤min(300,ki)。
题解
考场:
只会直观的DP,记 f [ i ] [ j ] f[i][j] f[i][j]为 i i i子树内分成 j j j组的方案数,转移时枚举、容斥一下,但效率是 O ( n × m 2 ) O(n\times m^{2}) O(n×m2)的,就算用虚树优化也过不了,于是只拿了60的暴力。
正解:
若直接在树上做,难以避免枚举子树分成几组,转移时效率不优秀。
故考虑能否每次只加入一个点。发现若按照一定顺序一个个加入点,记 f [ i ] [ j ] f[i][j] f[i][j]为前 i i i个分为 j j j组,则每次转移为 f [ i ] [ j ] = f [ i − 1 ] [ j − 1 ] + f [ i ] [ j − 1 ] × x f[i][j]=f[i-1][j-1]+f[i][j-1]\times x f[i][j]=f[i−1][j−1]+f[i][j−1]×x,十分优秀。考虑 x x x怎么算,对于不能有祖先关系,只考虑后代不能放到祖先的集合,即每个点加入时,不能放到有它的祖先的集合,而此时它的祖先已全都加入,且一定在不同集合内,于是直接减去祖先个数即可。而对于加入点的顺序,考虑若在一颗树上,则按照深度顺序,那么对于一个根和一些关键点,即为它到根的路径上关键点的个数,整个过程用树状数组维护即可。
(CSP2019模拟)DTOJ 4624. 树相关推荐
- 手绘与码绘的比较---模拟风吹树动
手绘与码绘的比较-模拟风吹树动 一.内容介绍 本文主要介绍用手绘和码绘两种方式模仿一种自然现象–风吹树动的过程,以及在实现过程对这两种方式的比较和思考.之所以选择风吹树动,是因为每次速写画一些场景时( ...
- (CSP2019模拟)DTOJ 4650. 暗雪
题意 有nnn个物品,其中有一个是特殊的,每个物品有pip_ipi的概率是特殊的.每次可以询问一个集合是否有特殊物品,要求在kkk次询问内找出,且期望询问次数最少. 题解 先把题意转换为:构造一颗深 ...
- (CSP2019模拟)DTOJ 4646. block
题意 给定 nnn 个点,每个点有两个属性 valueivalue_ivaluei 和 keyikey_ikeyi 表示这个点的权值和关键字.要求将这 nnn 个点排成一个序列,满足 ∀1≤i≤n ...
- (CSP2019模拟)DTOJ 4632. 隐蔽的居所
题意 在小G的家乡,有很多人住在一个大湖的边上. 他告诉小D,这个大湖可以被视作一个圆.一共有 NNN 户人家, 他们住在这个圆的 NNN 等分点上,每个 NNN 等分点上恰好有一户人家. 这里的每户 ...
- 【2018.12.15】【考试总结】【模拟+逆序对+树状数组+贪心+multiset】爆零之旅
这是我悲惨的接近爆零的一次考试,但是本蒟蒻不能放弃,还是要总结的QAQ 答题卡 [题目背景] 八月是个悲惨的月份.先不谈炎热的天气,对于新生来说,八月意味着军训: 而对于高二高三的同学来说,八月意味着 ...
- 【dfs】【模拟】【树】I Like Matrix Forever!
I Like Matrix Forever! 题目大意: 有一个01矩阵,有一些操作:反转一个位置的数,反转一行的数,反转一列的数,回到第i次操作,每一次操作还要输出1的个数 原题: 题目描述 对一个 ...
- Day10 堆排序、模拟堆 trie树(字典树) 并查集
堆呢就是一棵树完全二叉树... 小根堆的话,根节点就是最小值 维护堆只有两个操作 up(k) down(k) cnt是堆的大小 建堆的话只需要把前n/2的数down下来就ok 复杂度是小于O(n) 的 ...
- 旧金山大学模拟数据库B+树维护过程
在翻看网络资料时无意中发现的一个有趣的小作品,由旧金山大学制作的模拟数据库B+Tree的存储维护过程,可以用来更直观的了解数据库的索引过程和树的概念 B+ Tree Visualization htt ...
- 【NOIP模拟】彩色树【树形dp】【树链剖分性质】【复杂度分析】
题意:一棵初始时为空的树,依次加入 nnn 个叶结点,每次加入后询问 用若干不同颜色的路径将树边染色后 每个点到根经过的颜色数 的最大值 的最小值. n≤106n\leq 10^6n≤106 首先发现 ...
最新文章
- Android:ViewPager为页卡内视图组件添加事件
- W32.Downedup.B顽固病毒——查杀记
- Java多线程超详细总结
- mysql怎么访问网页版_mysql在本地已经启动,但是在网页上不能直接访问的解决...
- java如何画百分比圆环_canvas绘制旋转的圆环百分比进度条
- java线程打水问题_Java 多线程 wait() 虚假唤醒问题
- [转载] python3基础:异常处理及python常见异常类型总结
- jboss mysql amp amp_怎么在JBoss中配置MySQL数据库连接池让Mysql支持中文
- android抢qq红包源码,QQ抢红包插件实现
- 如何理解邮件中的“CC、PS、FYI”等英文缩写?
- 虚拟网络之Kubernetes Cilium CNI 快速部署实操
- SOFA Weekly | MOSNSOFARPC 发布、社区活动报名
- dlna android电视,DLNA怎么用?DLNA连接智能电视和电脑的方法分享
- 报告显示,宝爸参与度不断提升,超三成男性提前服用营养品备孕
- 阿里云认证攻略,考试注意事项
- 30人围成一圈的小游戏。c语言
- JavaWeb项目部署服务器并配置ssl证书教程
- paper:DeepAR: Probabilistic forecasting with autoregressive recurrent networks DeepAR模型
- 命令行执行 mvn package 和常见mvn命令
- HTTP协议(B/S架构下的请求与响应)