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

lgP14254 分割(divide)

lg scp-s模拟赛T2
场上计数的部分调了很久没过。
主要讲一下场上的思路吧,可能有点乱。
首先可以发现每个节点子树的深度集合可以表示成一个上界和一个下界。
下界是节点本身的深度,上界是节点子树里最深的节点的深度。
然后集合的并就相当于对上界取最小,下界取最大。
那我们先选定 \(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.sczhlp.com/news/217358/

相关文章:

  • 网站开发一个多少钱啊建设通网站有建筑公司名录大全
  • 网站开发mvc架构卖货小程序
  • 宿迁做网站哪家好竞价推广招聘
  • php响应式个人博客网站设计河北网站设计成功柚米科技
  • 跨境电商网站建设方案书域名备案名称
  • 网站被墙检测网络广告策略有哪些
  • 在电脑上做网站的软件因酷网站建设
  • 深圳网站的设计公司有关电子商务网站建设的论文
  • 北京网站备案代理网站的售后服务
  • 能添加网站的导航dw网页制作登录页面步骤
  • 企业网站的信息内容包括什么息县网站建设公司
  • 南京建设个人网站互联网公司花名大全男
  • 江西航达建设集团网站网页版百度云
  • 大理建设工程信息网站网站备案管局电话
  • 专业做鞋子网站wordpress的程序文件
  • 电脑网站你懂我意思正能量惠州市惠城区规划建设局网站
  • 网站设计图尺寸网上银行登录入口
  • 知名企业网站搭建品牌网站建设准备工作总结
  • 唐山网站搭建知晓小程序商店
  • 做网站兼职小程序无代码开发平台
  • 郑州做响应式网站南昌英文网站建设
  • 长沙建站费用代理下单网站开发
  • 北京网站软件制作邵阳网站seo
  • 广州的网站建设公司哪家好做营销型网站的企业
  • 专业模板建站软件小视频做网站怎么赚钱
  • 如何看网站关键词贵阳网站建设葫芦岛
  • 网站城市切换代码杭州seo排名费用
  • python做网站显示表格关键词生成器 在线
  • 太原网站建设方案报价wordpress w3 total cache
  • 外贸设计网站网站地图