题解:P14254 分割(divide)

news/2025/10/18 21:48:20/文章来源:https://www.cnblogs.com/a1a2a3a4a5/p/19150197

题目:

有交且 \(b_1\) 深度最小,我们要选 \(k\) 个点深度相同的点。

手玩样例发现选点的时候我们被子树内最深深度限制,称 \(x\) 子树内最深深度为 \(h_x\)

把每层的点拎出来
\(b_1\)\(1\) 为根的点很特殊,所以考虑枚举 \(h_1\),然后发现 \(\{b_2…b_{k+1} \}\) 需要保证 \(h_i\ge h_1\)\(\exists h_i=h_1\)
\(1\) 为根的树更为厉害,它可以把所有别人没选的都并起来,所以我们只需要给他预留一个 \(h_i\ge h_1\) 的位置就好了。

假设 \(h_1\) 的数量为 \(cnt\)\(h_i>h_1\) 的数量为 \(len\)

有两种情况:

  • \(\exists h_i=h_1\)
    答案贡献为(我们容斥掉 \(\nexists h_i=h_1\)):
    \(cnt C_{cnt+len-1}^{k-1}(k-1)!-cnt C_{len}^{k-1}(k-1)!\)

  • \(\nexists h_i=h_1,h_{k+1}=h_1\)
    这个条件在 \(len=k-1\) 时成立。
    答案贡献为:
    \(cnt\times (k-1)!\)

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int read()
{int x=0,f=1;char c=getchar();while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();return x*f;
} 
const int mo=998244353,QAQ=1e6+19,inf=1e6;
int ksm(int x,int k)
{int da=1;for(;k;k>>=1,x=x*x%mo) if(k&1) da=da*x%mo;return da;
}
int jc[QAQ];
vector<int> dian[QAQ];
int n,k,fa[QAQ],shen[QAQ],mi[QAQ];
vector<int> cun[QAQ];
void dfs1(int x)
{shen[x]=shen[fa[x]]+1;int ez=0;for(int v:dian[x]){if(v==fa[x]) continue;dfs1(v);mi[x]=max(mi[x],mi[v]);ez++;}if(!ez) mi[x]=shen[x];cun[shen[x]].push_back(mi[x]);
}
int cnm(int n,int m)
{if(m>n) return 0;return jc[n]*ksm(jc[n-m]*jc[m]%mo,mo-2)%mo;
}
int ans;
signed main()
{jc[0]=1;for(int i=1;i<=inf;i++) jc[i]=jc[i-1]*i%mo;cin>>n>>k;for(int i=2;i<=n;i++) fa[i]=read(),dian[fa[i]].push_back(i);dfs1(1);for(int dep=1;dep<=mi[1];dep++){if(cun[dep].size()<k+1) continue;sort(cun[dep].begin(),cun[dep].end());int cnt=1,len=cun[dep].size(),zong=cun[dep].size();len--;for(int i=1;i<zong;i++){if(cun[dep][i]!=cun[dep][i-1]){if(len+cnt-1>=k){if(len==k-1) ans=(ans+cnt*jc[k-1])%mo;ans=(ans+cnt*cnm(cnt+len-1,k-1)%mo*jc[k-1]%mo)%mo;ans=(ans-(cnt*cnm(len,k-1)%mo*jc[k-1]%mo))%mo;cnt=1;}}else cnt++;len--;}if(len+cnt-1>=k){if(len==k-1) ans=(ans+cnt*jc[k-1])%mo;if(cnt>=2)ans=(ans+cnt*cnm(cnt+len-1,k-1)%mo*jc[k-1]%mo)%mo,ans=(ans-(cnt*cnm(len,k-1)%mo*jc[k-1]%mo))%mo;}}cout<<(ans+mo)%mo;return 0;
}

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

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

相关文章

学生信息管理系统(DAO模式重构)项目报告

学生信息管理系统(DAO 模式重构)项目报告目录学生信息管理系统(DAO 模式重构)项目报告一、项目概述1.1 项目功能介绍1.2 原项目结构1.3 原项目不足1.4 改造方向1.5 改造后的优势二、项目分析2.1 结构解析2.1.1 DAO…

思科公司分析

目录背景和价值参考资料 背景和价值 对于您这样保守的投资人来说,思科确实呈现出一个值得仔细权衡的投资画像:它像一艘财务稳健、拥有宽阔护城河的航母,但航速可能不如那些新兴的科技快艇。下面,我将结合您提出的六…

桃星中央关于重大去向问题的初步决定

桃星中央关于重大去向问题的初步决定 经过参谋部汇总各方民意,最终根据中央定下的“最好不过江,中原附近”的标准,以及考虑到院校实力和自身情况,最终决定重大去向问题的初步结果: 北京市 上海市 江苏省南京市 湖…

Google Deepmind 宣布与 CFS 合作开发核聚变

Google Deepmind 宣布与 CFS 合作开发核聚变 2025 年 10 月 16 日,Google DeepMind 和 Commonwealth Fusion Systems (CFS) 共同宣布建立研究合作伙伴关系,将 AI 全面引入下一代聚变能源的设计和运行中。Commonwealt…

开源嵌入模型对比:让你的RAG检索又快又准

嵌入(Embedding)是RAG流程里非常关键的一个步骤。它处理的是数据提取和分块之后的内容,嵌入的好坏直接影响系统能不能准确地表示和检索信息。这篇文章会讲清楚嵌入是什么、怎么工作的,还有怎么挑选合适的模型。 经…

C++lambda表达式简单笔记

lambda表达式lambda表达式语法#include <iostream>int main(int argc, char* argv[]) {/*** 1. 基本形式与语法*///如果没有传入参数,参数列表可以省略auto lambda1 = []() { std::cout << "Hello, …

智慧城市基础设施漏洞分析与国家安全影响

本文深入分析智慧城市基础设施中的安全漏洞,涵盖智能交通系统、智能电网、智能监控系统和水务管理系统的具体漏洞技术细节,提供概念验证脚本和缓解策略,旨在提升对国家安全至关重要的城市环境网络安全防护能力。智慧…

️ PostgreSQL 数据类型

一、数据类型体系概览 PostgreSQL 拥有极其丰富的数据类型系统,既包含标准 SQL 类型,也扩展了许多高级类型。 1.1 数据类型分类总览分类 主要类型 特点 应用场景数值类型 整数、小数、浮点数 精确/近似计算 统计、财…

总想要透过你眼睛 去找寻最原始的野性 没想到最后却闯进 一整座森林的宁静 你呼吸 蓝丝绒包裹身体 和海洋的哼鸣 我永远不愿醒 我可以 躲进你的身体 进入温暖的你 躲进你的身体 进入温暖的你 总想要透过你眼睛 去找寻水…

CSP-J/S 2025 第一轮游记

前言 感觉这次 CSP 打的还可以,达到超过分数线 \(10\) 分的目标了。希望复赛也能拿到可观的分数。 当然,You have no egg!。 考前三天 考前三天。一到机房就和 yanzixuan2024 它们打术士,真不错。 考前两天 下午 4:…

【汇编和指令集 . 第2025 .10期】万般皆为投影

【编者按】Unicode整理、编码了世界上大部分的文字系统,使得电脑可以用更为简单的方式来呈现和处理文字,目前已经收录超过13万个字符,涵盖了从基本的拉丁字母到复杂的汉字、日文和阿拉伯文字等。汇编和指令集是计算…

小作业 12

已知 \(x\sqrt{1-y^2}+y\sqrt{1-x^2}=1\),求证 \(x^2+y^2=1\)。\[x\sqrt{1-y^2}+y\sqrt{1-x^2}=1 \]\[x\sqrt{1-y^2}=1-y\sqrt{1-x^2} \]\[x^2(1-y^2)=1+y^2(1-x^2)-2y\sqrt{1-x^2} \]\[2y\sqrt{1-x^2}=1+y^2-x^2 \]\…

Python 潮流周刊#123:你可能不需要单例模式

本周刊由 Python猫 出品,精心筛选国内外的 400+ 信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进 Python 技术,并增长职业和副业的收入。 温馨提…

Python 潮流周刊#122:Python 3.14 来了,速度如何?

🎉 1024程序员节特惠: 10.24 - 10.31 期间,本周刊年费仅需 99 元(原价 148 元),一年一次的大幅优惠,敬请留意! 本周刊由 Python猫 出品,精心筛选国内外的 400+ 信息源,为你挑选最值得分享的文章、教程、开源…

机器学习在视频质量检测中的技术应用

本文详细介绍了某视频平台如何利用机器学习技术检测视频质量缺陷,包括块状损坏检测、音频伪影识别和音视频同步问题检测等技术方案,通过残差神经网络和预训练音频模型实现自动化质量监控。机器学习在视频质量检测中的…

实用指南:【读书笔记】《苏东坡》

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

一位焦虑的普通二本软件工程的学生

介绍 我是一位普通的大三本科生,学的东西有点杂c语言,java,js,ts,go,python...总想着什么都涉及一点,我很贪心。 回顾 高二 高二的寒假,闲着无聊的我用电脑刷着b站。那时候是高中我没有手机,偶然间我刷到了狂…

C++类的运算符重载

1、加号运算符重载(加减乘除) 首先假设你有一个Person类,里面有个成员变量m_a和m_b,现在你想使p1+p2等价于p1.m_a+p2.m_a,p1.m_b+p2.m_bclass Person { public:Person() {};Person(int a, int b) : m_a(a), m_b(b) …

10.18 CSP-S模拟34/2025多校CSP模拟赛6 改题记录

水HZOJ 写在前面 改了inf小时T3还没改出来破如防,本来不想写的,但还是随便写写吧。 A. 最长不下降子序列 哈哈哈过不去的大水题。 题意是给出一个由1和2组成的序列,可以选择某个连续区间翻转,求问最长不下降子序列…

微软Office LTSC 2021(KpoJIuK直装版)x64 v16.0.14334.20344 10月版

微软Office 2021 是微软公司最新发布的办公套件,提供了一系列强大的软件工具,包括Word、Excel、PowerPoint和Outlook等。 软件功能 Word:提供用于创建、编辑和格式化文档的功能,包括文字处理、图形插入、表格制作…