当前位置: 首页 > news >正文

P14254 分割(divide)

场上计数的部分调了很久没过。
主要讲一下场上的思路吧,可能有点乱。
首先可以发现每个节点子树的深度集合可以表示成一个上界和一个下界。
下界是节点本身的深度,上界是节点子树里最深的节点的深度。
然后集合的并就相当于对上界取最小,下界取最大。
那我们先选定 \(b_1\),然后发现选的 \(b\) 序列必须都跟 \(b_1\) 在同一层,不然不能保证下界取到 \(b_1\) 的下界。
接着还需要保证 \(b\) 序列里的数都的上界都需要大于等于 \(b_1\) 的上界,并且其中必须至少有一个 \(b_i\) 的上界等于 \(b_1\) 的上界。
设上界大于 \(b_i\) 的数有 \(t\) 个,等于 \(b_i\) 的有 \(c\) 个,\(c\) 小于 \(2\) 的情况可以直接省去因为选完 \(b_1\) 后集合的并怎么选都并不出 \(b_1\)
那容斥一下每个 \(b_1\) 的答案就是在 \(t+c-1\)\(k-1\) 个的方案数减去在 \(t\) 中选 \(k-1\) 个的方案数。
所有 \(b_1\) 的总方案数即为 \((A^{k-1}_{t+c-1}-A^{k-1}_{t})*c\)
场上想到这一步后就开始打代码了,但是发现计数计漏了。
因为还有一种可能的方案是我把上界大于 \(b_1\) 的全选完,这样子最后的并还是可以满足条件。
此时 \(t=k-1\) 并且 \(c>1\)
最后放上代码:

#include<bits/stdc++.h>
#define fir first
#define sec second
#define ll long long
#define pii pair<int,int>
#define e_b emplace_back 
#define p_b push_back
#define il inline
#define ios ios::sync_with_stdio(0),cin.tie(0)
using namespace std;
const int N=1e6+1;
const ll mod=998244353;
ll a[2*N],ans;
ll qpow(ll a,ll b){ll res=1;a%=mod;while(b){if(b&1)res=res*a%mod;a=a*a%mod,b>>=1;}return res;
}
ll inv(ll x){return qpow(x,mod-2);}
ll C(int n,int m){if(n<m||m<0)return 0;return a[n]*inv(a[n-m])%mod*inv(a[m])%mod;
}
ll A(int n,int m){if(n<m||m<0)return 0;return a[n]*inv(a[n-m])%mod;
}
int n,k,m=1;
int dep[N],mxd[N],fa[N];
vector<int>g[N];
bool cmp(int x,int y){return x>y;}
signed main(){ios;cin>>n>>k,a[0]=1;for(int i=1;i<=2*N-1;i++)a[i]=a[i-1]*i%mod;for(int i=2,f;i<=n;i++){cin>>f;fa[i]=f;}dep[1]=1;for(int i=2;i<=n;i++)dep[i]=dep[fa[i]]+1,m=max(m,dep[i]);for(int i=n;i>1;i--){mxd[i]=max(mxd[i],dep[i]);g[dep[i]].e_b(mxd[i]);mxd[fa[i]]=max(mxd[fa[i]],mxd[i]);}for(int i=1;i<=m;i++)sort(g[i].begin(),g[i].end(),cmp);for(int i=2;i<=m;i++){int len=g[i].size();for(int j=0;j<len;j++){int t=j,c=1;while(j+1<len&&g[i][j+1]==g[i][j])c++,j++;ll add=0;if(c>1&&c+t>=k+1)add+=A(t+c-1,k-1)-A(t,k-1),add=(add+mod)%mod*c%mod;if(t==k-1&&c>1)add+=a[k-1]*c%mod,add%=mod;ans=(ans+add)%mod;}}cout<<ans;return 0;
}
http://www.jsqmd.com/news/379462/

相关文章:

  • P9358 [ICPC 2022 Xian R] Bridge
  • 2026年可查实盘配资平台推荐:合规透明安全 - 资讯焦点
  • Spring Cloud 熔断降级实战:Sentinel 熔断策略与规则持久化
  • blender导出fbx没有贴图问题
  • 2026年广州家具搬运公司评测推荐榜单:告别搬家烦恼的实用指南 - 品牌推荐
  • 2026年耐介质腐蚀防护布TOP10厂商推荐榜 - 资讯焦点
  • 临沂有实力的橡胶木板材公司推荐 - 品牌推荐(官方)
  • 2026年度成熟GEO服务公司TOP7综合实力榜:AI搜索时代企业增长与选型深度指南 - 资讯焦点
  • 临沂诚信的橡胶木板材生产厂家哪家好 - 品牌推荐(官方)
  • ContextMenuManager 配置右键运行 python 脚本实现一键克隆仓库 - Higurashi
  • 2026年广州家电搬运公司评测推荐榜单:告别搬运烦恼,轻松开启新生活 - 品牌推荐
  • 2026年广州汉米尔顿手表维修评测推荐:非官方维修点选择指南与网点服务深度分析 - 品牌推荐
  • 2026年广州家电搬运公司推荐评测:告别搬运烦恼,专业团队如何选择? - 品牌推荐
  • 手把手部署mysql_exporter:打通MySQL与Prometheus监控链路
  • 2026年广州积家手表维修推荐评测:非官方维修点排行榜与售后网点选择指南 - 品牌推荐
  • 2026年广州积家手表维修网点推荐评测:非官方服务中心选择指南与避坑分析 - 品牌推荐
  • 真实生产案例:一次错误索引设计如何引发 MySQL 写性能雪崩
  • 2026年可查实盘配资平台分析与推荐 - 资讯焦点
  • 2026广东最新结婚五金批发TOP5推荐:优质厂商权威榜单发布,品质服务双优适配,助力婚嫁选购 - 品牌推荐2026
  • JWT 是 token 的一种格式,我的理解对吗?
  • 2026年广州家具搬运公司评测推荐:告别搬家烦恼,如何选择省心靠谱的服务商 - 品牌推荐
  • 2026年广州汉米尔顿手表维修推荐评测:非官方维修点榜单与售后网点服务指南 - 品牌推荐
  • 2026年广州家电搬运公司评测推荐:告别搬运烦恼,专业团队如何选择 - 品牌推荐
  • 2026年广州豪度手表维修推荐评测:非官方维修网点服务榜单与避坑指南 - 品牌推荐
  • 2026年广州豪度手表非官方维修网点推荐评测:面对维修难题如何选择可靠服务中心 - 品牌推荐
  • 2026广东最新黄金品牌生产厂家TOP5推荐:广州等地优质厂家直销权威榜单发布,覆盖多元场景,打造安心黄金消费体验 - 品牌推荐2026
  • 2026年广州豪利时手表维修推荐评测:非官方维修点榜单与售后网点服务指南 - 品牌推荐
  • 2026年广州豪度手表非官方维修网点推荐评测:寻找可靠售后服务的场景与痛点分析 - 品牌推荐
  • 临沂比较好的橡胶木板材源头厂家排行 - 品牌推荐(官方)
  • 2026年广州积家手表维修推荐评测:非官方维修点榜单与售后网点服务选择指南 - 品牌推荐