(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关于绘图中Shader 的效果(中级)
- js中继承的几种用法总结(apply,call,prototype)
- Selective Search
- 头插法建立单链表学习总结
- access建立两个字段唯一索引_数据库索引原理及优化
- python读写文件错误_Python读取csv文件错误解决方法
- CSS3动画大全(附源码)flex布局,grid布局3d旋转,图像模糊,文字发光
- linux下kegg注释软件,KEGG功能注释工具 KofamKOALA 安装与使用
- Centos eclipse打开文件自动退出
- 面试题 01.03. URL化
- 人工智能实战_第八次作业_手写数学式子识别_廖盈嘉
- OLTP和OLAP的区别
- SAP License:FICO重要概念(二)-附常用技巧
- 关注的计算机视觉研究组和个人主页列表
- android 15 activity跳转
- 计算机主页为什么打不开怎么办,主页被限制,打不开怎么办?
- 一个简单的完全信息动态博弈的解答
- 算法分析与设计——分治法实验报告
- 实时互动白板_使用froala文本编辑器构建实时协作白板第1部分
- 人在年轻的时候,最核心的能力是什么?-复利(转自知乎)