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

LG5689

\(f_u\) 表示以 \(u\) 为根的子树构成不同多叉堆的方案数。显然最小的 \(0\) 应该分配给 \(u\),剩下的分给子节点 \(v_1,v_2,\cdots,v_k\),根据乘法原理,有

\[f_u=\prod_{i=1}^k \binom{siz_u-1-\sum_{j=1}^{i-1}siz_{v_j}}{siz_{v_i}}f_{v_i} \]

将组合数和 \(f\) 分开,观察到组合数全部乘起来后分子即为 \((siz_u-1)!\),分母即为子节点大小阶乘的乘积,即

\[f_u=\dfrac{(siz_u-1)!}{\prod_{i=1}^ksiz_{v_i}!}\prod_{i=1}^kf_{v_i} \]

直接使用并查集维护点的关系,并在合并时更新对应的 \(f\) 即可。使用快速幂计算逆元,时间复杂度 \(O(n\log n+q)\)

#include<iostream>
#include<cstdio>
#define N 500010
#define mod 1000000007
#define int long long
using namespace std;
int n,m,fa[N],f[N],fac[N],inv[N],siz[N],ans;
int qp(int a,int b){int c=1;while(b){if(b&1)c=c*a%mod;b>>=1;a=a*a%mod;}return c;
}
int cx(int x){if(x==fa[x])return x;return fa[x]=cx(fa[x]);
}
signed main(){//f[u]=C_{siz[u]-1}^siz[v1]*f[v1]*C_{siz[u]-siz[v1]-1}^siz[v2]*f[v2]......*C_{siz[vk]}^siz[vk]*f[vk];//    =(siz[u]-1)!/(siz[v1]!siz[v2]!...siz[vk]!)*f[v1]f[v2]...f[vk]int op,x,y;cin>>n>>m;fac[0]=inv[0]=1;for(int i=1;i<=n;i++){fac[i]=fac[i-1]*i%mod;inv[i]=qp(fac[i],mod-2);fa[i]=i,siz[i]=1,f[i]=1;}while(m--){cin>>op;if(op==1){cin>>x>>y;x=(x+ans)%n;y=(y+ans)%n;x++;y++;x=cx(x),y=cx(y);f[y]=f[y]*inv[siz[y]-1]%mod*fac[siz[y]+siz[x]-1]%mod;f[y]=f[y]*inv[siz[x]]%mod;f[y]=f[y]*f[x]%mod;fa[x]=y;siz[y]+=siz[x];}if(op==2){cin>>x;x=(x+ans)%n;x++;x=cx(x);ans=f[x];cout<<ans<<'\n';}}return 0;
}
http://www.sczhlp.com/news/92858/

相关文章:

  • 近五年 CSP NOIP 补题记录
  • CF2111C
  • 唐人日记
  • CF2111B
  • 代做设计的网站网站建设的组织保障
  • 网站闭站做网站排名赚钱吗
  • 在网上怎么建立自己的网站湛江房产网
  • 网站开发人员叫什么佛山智能模板建站
  • 蘑菇街网站服务南宁网站设计推广
  • 人工智能公司网站建设一个交易网站开发的成本是多少
  • 网站模板类型备案系统网站
  • 织梦搭建商城网站网站 建设 欢迎你
  • 网站上截小屏幕 怎么做怎么自创网站
  • 创意网站设计 高端赣州网页制作公司
  • ABC394F
  • LG11793
  • ABC394G
  • 做液氮冰淇淋店网站linux 做网站数据库
  • 海口模板建站平台雏光 网络推广 网站建设
  • MX 炼石 2026 NOIP #5
  • 网站的服务器选择如何网上卖东西
  • 网站建设项目工作分解门户网站建设需求文档
  • 安徽华建建设工程公司网站做网站优化有什么途径
  • 南京中小企业网站制作官网招聘和招聘网站
  • 网站开发人员职能图片墙网站代码
  • 设计师网站大全公司网站建设注册
  • 宣传平台有哪些seo优化广告
  • 金融网站怎么做的wordpress返佣
  • 网站开发后端用什么技术网站建设网站建设 网站制作
  • 0126_状态模式(State)