正睿25noip十连测day5

news/2025/10/12 23:06:32/文章来源:https://www.cnblogs.com/SigmaToT/p/19137467

题面:
image
image
image
image
image
image
image

今天有点 fvv,只是 \(110pts,rk124\)

T1

这道题是签到题,显然不用说。

T2

这道题比较难想。
我们先考虑这个给的数据范围啥意思。
\(2e5\) 大概率是 \(\mathcal{O}(n)\)\(\mathcal{O}(n\log n)\)
然后到了 noip 这个级别,如果是 \(\mathcal{O}(n)\) 的话,一般就给你 \(1e6\) 了。

然后这种计数题一般是 \(dp\),所以我们考虑 \(dp\) 的状态能是啥。

首先肯定有个 统计到 x 这个点,所以我们就考虑第二维是啥。

第二个变化并且题目里面提到的量显然是当前节点的 \(mex\)

因此,我们就维护每个点的 \(mex\)

但是直接维护显然不好维护,我们需要状压一下。

然而 \(1e5\) 显然太大了,不可行。

我们考虑每个如果 \(mex\)\(k\),那么对它的子节点有什么要求。

我们发现如果要构造出一个点的 \(mex\)\(k\),那么需要的节点数

\[f(k) = \begin{cases} 1&,k = 0\\ 1 + \displaystyle\sum_{j = 0}^{k - 1}f(j)&,k > 0 \end{cases} \]

因为这要求这个点的所有子节点分别 \(mex\)\(0\sim k - 1\)

因此 \(f(k) = 2^{k}\)

简单证明一下:

我们考虑数学归纳法。

首先,当 \(k = 0\) 时,显然成立。

\(k > 0\) 时,我们不妨令 \(1\sim k - 1\) 都成立。

那么 \(f(k) = 1 + 1 + 2 + 4 + \cdots + 2^{k - 1} = 2^k\)

因此成立。

又因为总的点数是 \(n\) 个。

所以 \(k = \log_2{n}\)

因此一个点的 \(mex\) 是在 \(\mathcal{O}(\log n)\) 级别的。

所以我们只需要在 \(\mathcal{O}(n\log n)\) 的时间内,就可以算出答案了。

具体地,我们令 \(dp[x][i]\) 表示遍历到了 \(x\),当前的 \(mex\)\(i\) 的总方案数。

再令 \(f[0/1][i]\),表示当前的子节点的 \(mex\) 中,有哪些数出现了的方案数(0/1 是滚动数组, \(i\) 是二进制下的一个数)。

我们可以先预处理出对于每个二进制 \(i\),它的 \(mex\) 是多少。

然后我们考虑显然我们要维护一个当前节点的 \(mex\) 的最大取值。

那我们就利用子节点的 \(mex\) 的最大取值,先令当前节点的 \(mex\) 的最大取值(以下简称 \(maxmex\))为 \(0\)

然后对所有子节点的 \(mex\) 的最大取值 \(sort\) 一遍。

然后再从小到大枚举,如果当前枚举到的值 \(\geq\) \(maxmex\)

我们就让 \(maxmex\) 加一。

至于为什么嘛 \(\dots\)

可以好好想一想。

然后转移看我的代码就行了。

#include <iostream>
#include <vector>
#include <algorithm>using std::cin;
using std::cout;
const int N = 2e5 + 10;
const int p = 998244353;int max[(1 << 22)];
int mex[(1 << 22)];
int f[2][(1 << 22)];
int dp[N][22];
std::vector<int> now[N];
std::vector<int> e[N];void dfs(int x, int fa)
{if (x != 1 && (e[x].size() == 0 || e[x].size() == 1)){dp[x][1] = dp[x][0] = 1;max[x] = 1;return;}for (auto to : e[x]){if (to != fa)dfs(to, x);if (to != fa)now[x].push_back(max[to]);}int nowmax = 0;std::sort(now[x].begin(), now[x].end());for (auto it : now[x]){if (it >= nowmax)nowmax++;}max[x] = nowmax;int opt = 0;f[0][0] = 1;for (auto to : e[x]){if (to == fa)continue;for (int i = 0; i < (1 << (nowmax + 1)); ++i)f[opt ^ 1][i] = 0;for (int i = 0; i < (1 << (nowmax + 1)); ++i){for (int j = 0; j <= max[to]; ++j){if (j <= nowmax)f[opt ^ 1][i | (1 << j)] = (1ll * f[opt ^ 1][i | (1 << j)] + 1ll * f[opt][i] * dp[to][j] % p) % p;elsef[opt ^ 1][i] = (1ll * f[opt ^ 1][i] + 1ll * f[opt][i] * dp[to][j] % p) % p;}}opt ^= 1;}for (int i = 0; i < (1 << (nowmax + 1)); ++i)dp[x][mex[i]] = (1ll * dp[x][mex[i]] + f[opt][i]) % p;for (int i = 0; i < (1 << (nowmax + 1)); ++i)f[0][i] = f[1][i] = 0;
}int main()
{int n;cin >> n;for (int i = 2; i <= n; ++i){int fa;cin >> fa;e[i].push_back(fa);e[fa].push_back(i);}for (int i = 0; i < (1 << 21); ++i){while (i & (1 << mex[i]))mex[i]++;}dfs(1, 0);for (int i = 0; i <= max[1]; ++i)cout << dp[1][i] << '\n';for (int i = max[1] + 1; i <= n; ++i)cout << 0 << '\n';return 0;
}

至于T3和T4,等我会了在写吧 \(\dots\)

(还有就是,这道题是个细节题, TLERE 了,大概率就是超时了,而且只需要优化一点点,不用整体调整;有问题记得在底下评论发哦~)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/935781.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记录一下 WPF进程 SendMessage 发送窗口消息进行进程间通信,存在进程权限无法接受消息的问题

前言 最近在接手一个前同事写的WPF项目,是使用.NetFramwork 开发的,使用的进程间通信没有使用我们之前封装的基于WebSocket的封装组件的,而是使用Win32的方式:发送端用的Windows Api:SendMessage ,接受端使用的是…

kettle插件-dm数据库插件,解决kettle9.X版本无法连接数据库资源库问题

场景: 上周四一位小伙伴发出求助,周末有时间一起看下如何解决此问题,信息如下: 用 pdi(kettle)9.2 和 9.4 连接达梦资源库,达梦数据库信息和资源库登录的账密信息一模一样 但是 9.2 可以登录,9.4 一直就是登…

QT6中QGraphicsView特性与应用

QT6中QGraphicsView特性与应用2025-10-12 22:57 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importan…

2025年10月武汉防水公司TOP5权威推荐榜:专业施工与优质服务的行业

随着建筑行业的快速发展,防水工程在各类建筑项目中的重要性日益凸显。优质的防水工程不仅能有效延长建筑物的使用寿命,还能显著提升居住和使用的舒适度。为了帮助筛选防水公司品牌,特此发布权威推荐榜单,为采购决策…

2025开发区婚纱照公司最新权威推荐榜:创意拍摄与贴心服务的

2025开发区婚纱照公司最新权威推荐榜:创意拍摄与贴心服务的随着婚庆市场的不断发展,越来越多的新人们开始重视婚纱照的质量和创意。为了帮助筛选婚纱照品牌,特此发布权威推荐榜单,为采购决策提供专业参考价值。本文…

用户交互scanner方法学习及使用示例

Scanner的next方法 调用方法前 一般先通过scanner.hasNext()来判断用户是否有输入 流程 首先,next方法只有读取到有效字符才结束等待输入 之后,自动去掉有效字符前面的空白(因此,用户在有效字符前输入的空白不会被…

2025工业网线厂家最新权威推荐榜:稳定传输与耐用品质的首选

2025工业网线厂家最新权威推荐榜:稳定传输与耐用品质的首选随着工业自动化和数字化转型的不断推进,工业网线作为数据传输的关键组件,其重要性日益凸显。为了确保数据传输的稳定性和设备的耐用性,选择一家可靠的工业…

2025/10/12

2025/10/121.学习算法 2.完成作业 3.休息

完整教程:STM32H743-ARM例程11-PWM

完整教程:STM32H743-ARM例程11-PWMpre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

2025铝合金微弧氧化定制厂家权威推荐榜:品质卓越与技术创新

2025铝合金微弧氧化定制厂家权威推荐榜:品质卓越与技术创新随着工业技术的不断进步,铝合金微弧氧化处理技术在各个领域中的应用越来越广泛。特别是在航空航天、汽车制造、电子设备等行业中,对铝合金表面处理的要求越…

2025年10月拉伸器厂家最新权威推荐榜:高效稳定与卓越品质的行业首

随着工业自动化和智能制造的快速发展,液压扳手作为关键工具在多个行业中发挥着重要作用。为了帮助筛选液压扳手品牌,特此发布权威推荐榜单,为采购决策提供专业参考价值。一、液压扳手厂家推荐榜推荐一:马鞍山市罗泰…

2025数粒机厂家最新权威推荐榜:精准高效与智能控制的行业首

2025数粒机厂家最新权威推荐榜:精准高效与智能控制的行业首选随着工业自动化和智能化的发展,数粒机作为关键设备,在制药、食品、化工等行业中的应用越来越广泛。为了帮助筛选数粒机品牌,特此发布权威推荐榜单,为采…

Spring拦截器HandlerInterceptor与Filter方法执行顺序探究

单个拦截器与Controller方法的执行顺序 拦截器的preHandle方法在进入到Controller方法之前执行,且只有当方法返回true时才能进入到被拦截的Controller方法;如果该方法返回false,则被拦截的Controller方法不会执行,…

企业自动化立体库WMS解决方案(42页PPT) - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025精加工车间恒温恒湿系统TOP5榜单:精准控温与高效节

2025精加工车间恒温恒湿系统TOP5榜单:精准控温与高效节能随着工业技术的不断进步,精加工车间对环境控制的要求越来越高。恒温恒湿系统作为确保车间内温度和湿度稳定的关键设备,其重要性不言而喻。本文将为您推荐202…

2025数控滚齿机订制厂家权威推荐:高精度与高效能的首选品牌

2025数控滚齿机订制厂家权威推荐:高精度与高效能的首选品牌随着制造业的不断发展和技术进步,数控滚齿机在精密齿轮加工领域的作用愈发重要。选择一家高质量、高效率的数控滚齿机厂家对于企业的生产至关重要。本文将从…

2025婚纱摄影工作室权威推荐榜:捕捉幸福瞬间的创意大师

2025婚纱摄影工作室权威推荐榜:捕捉幸福瞬间的创意大师在当今社会,婚纱摄影已经不仅仅是记录新人美好时刻的一种方式,更是一种艺术创作。随着技术的发展和消费者需求的多样化,婚纱摄影行业也在不断进化。为了帮助筛…