玲珑杯1114(组合数)
来源:互联网 发布:淘宝直播卖东西可信吗 编辑:程序博客网 时间:2024/06/05 18:49
题意:求有多少个以1号点为根的N个点的带标号有根树, 满足深度为奇数的点恰有K个, 答案对998244353取模
根的深度为1
分析:记SMN 为左边N个点, 右边M
个点的完全二分图生成树个数
答案即SKN−K×(N−1K−1)
, 证明显然, 因为把树上的点按照奇偶分层,即得到一个二分图, 每一棵树都对应了这个完全二分图的一个生成树
SMN=NM−1×MN−1
, 暴力用Matrix−Tree可以消元得到这个结论。#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll mod=998244353;const int maxn=500000;ll fac[maxn+10];ll inv[maxn+10];ll mul(ll a,ll b){ ll ans=1; while(b) { if(b&1) ans=(ans*a)%mod; b>>=1; a=(a*a)%mod; } return ans;}void init(){ fac[0]=1; for(int i=1;i<=maxn;i++) fac[i]=(i*fac[i-1])%mod;}ll mod_fact(ll n,ll &e){ e=0; if(n==0)return 1; ll res=mod_fact(n/mod,e); e+=n/mod; if(n/mod%2!=0) return res*(mod-fac[n%mod])%mod; else return res*fac[n%mod]%mod;}ll extgcd(ll a,ll b,ll &x,ll &y){ ll d=a; if(b!=0){d=extgcd(b,a%b,y,x);y-=(a/b)*x;} else{x=1,y=0;} return d;}ll mod_inv(ll a){ ll x,y; extgcd(a,mod,x,y); return (mod+x%mod)%mod;}ll lucas(ll n,ll k){ if(n<0||k<0||n<k)return 0; ll e1,e2,e3; ll a1=mod_fact(n,e1); ll a2=mod_fact(k,e2); ll a3=mod_fact(n-k,e3); if(e1>e2+e3)return 0; return a1*mod_inv(a2*a3%mod)%mod;}int main(){ ll n,k; init(); while(~scanf("%lld%lld",&n,&k)) { ll ans=1; ans=(ans*mul(k,n-k-1))%mod; ans=(ans*mul(n-k,k-1))%mod; //printf("%lld\n",ans); ans=(ans*lucas(n-1,k-1))%mod; printf("%lld\n",ans); } return 0;}
阅读全文
1 0
- 玲珑杯1114(组合数)
- 玲珑oj 1032A-B(组合数学)
- 玲珑杯(树状数组)
- 玲珑杯round18(数论)
- 玲珑杯 1146(dp)
- 玲珑杯
- 组合数(nyoj32)
- 组合数(dfs)
- 组合数(dfs)
- 组合数 (Lucas)
- 组合数(未完)
- sumcomb (组合数)
- uva1635(组合数)
- 组合数(dfs)
- 玲珑杯 H -- Variance(线段树)
- 玲珑杯-1112 (倍增+二分)
- 【玲珑杯 1049】【卡特兰数+(lucas定理+预处理)】Deg-route【求从 (0,0)到 (n,n)不穿过对角线 x = y 的方法数】
- 玲珑杯 1066(“玲珑杯”ACM比赛 Round #6)(区间DP+四边形不等式优化)
- 触电(by quqi99)
- C++模板(一)
- 手把手教你用Mysql-Cluster-7.5搭建数据库集群
- Python whl包、tar包、tar.gz包的区别
- Shell实现俄罗斯方块小游戏
- 玲珑杯1114(组合数)
- 杭电acm 3132GCC(简单数论)
- 三条命令解决Git 如何删除远程服务器文件同时保留本地文件
- 百度地图简要功能实现
- hdu 6061 NTT
- 网易2017年校招笔试题--最大奇约数
- TensorFlow学习笔记
- 微信公众平台开发——如何保证access_token长期有效?
- 《代码整洁之道》第七章——错误处理