【LGP5437】【XR-2】约定
显然每一条边出现在生成树中的方案数是相等的
根据矩阵树定理,\(n\)个节点的完全图生成树个数是\(n^{n-2}\)种,完全图共有\(\frac{n(n-1)}{2}\)条边,一棵生成树共\(n-1\)条边
于是对于任意一条边,在所有生成树中的总出现次数是
\]
于是每一条边前面多了一个系数,可以理解为每一条边出现的概率
\]
这个东西乘上边权和\(\sum_{i=1}^n\sum_{j=i+1}^n(i+j)^k\)
显然\(i,j\)都从\(1\)开始更好求一些,于是求一下\(\sum_{i=1}^n\sum_{j=1}^n(i+j)^k\),减去\(\sum_{i=1}^n(2i)^k=2^k\sum_{i=1}^ni^k\),再除以\(2\)就是总边权和了
不要在傻乎乎的二项式定理拆里面的东西了,我们直接枚举\(i+j\)的值,显然这玩意长得跟个矩阵是的,每一条对角线上的值都是一样的,还有一些对称的美好性质,于是瞎推一下就有
\]
大力拉格朗日插值就好了
代码
#include<bits/stdc++.h>
#define re register
const int maxn=1e7+5;
const int mod=998244353;
inline int ksm(int a,int b) {
int S=1;
for(;b;b>>=1,a=1ll*a*a%mod) if(b&1) S=1ll*S*a%mod;
return S;
}
int f[maxn],p[maxn>>2],pre[maxn][2],a[maxn],b[maxn],fac[maxn],ifac[maxn];
int n,k,ans1,ans2,ans3,ans4;
inline int qm(int a) {return a<0?a+mod:a;}
inline int calc(int x,int o) {
int N=(o==1?k+2:k+1);
a[0]=b[0]=x;b[N+1]=1;
for(re int i=1;i<=N;i++) a[i]=1ll*a[i-1]*(b[i]=qm(x-i))%mod;
for(re int i=N-1;i>=0;--i) b[i]=1ll*b[i]*b[i+1]%mod;
int tot=0;
for(re int i=1;i<=N;i++) {
int now=1ll*ifac[i]*ifac[N-i]%mod;
if((N-i)&1) now=mod-now;
now=1ll*now*a[i-1]%mod*b[i+1]%mod;
tot=(tot+1ll*now*pre[i][o]%mod)%mod;
}
return tot;
}
int main() {
scanf("%d%d",&n,&k);fac[0]=ifac[0]=1;pre[1][0]=pre[1][1]=1;
for(re int i=2;i<=k+2;i++) {
if(!f[i]) p[++p[0]]=i,pre[i][0]=ksm(i,k),pre[i][1]=ksm(i,k+1);
for(re int j=1;j<=p[0]&&p[j]*i<=k+2;++j) {
pre[p[j]*i][0]=1ll*pre[p[j]][0]*pre[i][0]%mod;
pre[p[j]*i][1]=1ll*pre[p[j]][1]*pre[i][1]%mod;
f[p[j]*i]=1;if(i%p[j]==0) break;
}
}
for(re int i=1;i<=k+2;i++) fac[i]=1ll*fac[i-1]*i%mod;
ifac[k+2]=ksm(fac[k+2],mod-2);
for(re int i=k+1;i;--i) ifac[i]=1ll*ifac[i+1]*(i+1)%mod;
for(re int i=1;i<=k+1;++i) pre[i][0]=(pre[i-1][0]+pre[i][0])%mod;
for(re int i=1;i<=k+2;++i) pre[i][1]=(pre[i-1][1]+pre[i][1])%mod;
ans1=calc(n+1,1);ans2=calc(2*n,1)-ans1;
ans3=calc(n+1,0),ans4=calc(2*n,0)-ans3;
ans2=(ans2+mod)%mod,ans4=(ans4+mod)%mod;
ans4=1ll*ans4*(2*n+1)%mod;
int ans=(ans1+ans4)%mod-(ans2+ans3)%mod;
ans=(ans+mod)%mod;
ans=(ans-1ll*ksm(2,k)*calc(n,0)%mod+mod)%mod;
printf("%d\n",1ll*ans*ksm(n,mod-2)%mod);
return 0;
}
【LGP5437】【XR-2】约定的更多相关文章
- [译]C#编码约定
原文:https://msdn.microsoft.com/en-us/library/ff926074.aspx 编码约定的目的是: 创建统一格式的代码,让读者的注意力更集中在内容上面,而不是结构 ...
- Entity Framework Code First属性映射约定
Entity Framework Code First与数据表之间的映射方式有两种实现:Data Annotation和Fluent API.本文中采用创建Product类为例来说明tity Fram ...
- Entity Framework Code First关系映射约定
本篇随笔目录: 1.外键列名默认约定 2.一对多关系 3.一对一关系 4.多对多关系 5.一对多自反关系 6.多对多自反关系 在关系数据库中,不同表之间往往不是全部都单独存在,而是相互存在关联的.两个 ...
- 3.Code-First 约定(EF Code-First系列)
前面,我们已经了解了Code-First利用领域类,怎么为我们创建数据库的简单示例.现在我们来学习一下Code-First约定吧. 什么是约定 约定说白了,就是基于一套规矩办事,这里就是基于你定义好的 ...
- UDS(ISO14229-2006) 汉译(No.5 公共约定)
ISO 14229遵循OSI Service Conventions(ISO 10731)(OSI服务公约)所述,并应用于诊断服务.这些约定指定相互作用与服务消费者和服务提供者.通过服务原语,信息数据 ...
- Startup配置类 居然又是约定
Microsoft.Owin.Host.SystemWeb 这个dll可以让OWin接管IIS的请求,虽然同样是托管在IIS,但是所有的请求都会被OWin来处理.在OWin的4层结构中(Applica ...
- XD, XR, DR 股票
股权登记日与除权除息日 所以,如果投资者想得到一家上市公司的分红.配股权,就必须弄清这家公司的股权登记日在哪一天,否则就会失去分红.配股的机会. 股权登记日后的第一天就是除权日或除息日,这一天或以后购 ...
- 单元测试 逃不开的Done 与约定
关注单元测试有一段时间了,也做了些尝试然后就停了下来,寻找框架.方法.各种尝试 看得多,尝试的少, 关于框架分为两类,1是自动化测试工具类,1是js单元测试框架 关于自动化测试工具我尝试了http:/ ...
- ORM系列之二:EF(4) 约定、注释、Fluent API
目录 1.前言 2.约定 2.1 主键约定 2.2 关系约定 2.3 复杂类型约定 3.数据注释 3.1 主键 3.2 必需 3.3 MaxLength和MinLength 3.4 NotMapped ...
随机推荐
- 拦截器一Interceptor
import org.springframework.web.servlet.HandlerInterceptor; 前言 拦截器,在AOP(Aspect-Oriented Programming)中 ...
- Delphi之TPersistent类 -----ASSIGN
Delphi之TPersistent类 TPersistent类 TPersistent类是由TObject直接派生的.凡是由TPersistent派生的对象都能够进行流操作.因为所有的组件都是由TP ...
- bzoj1051题解
[题意分析] 给你一张有向图,求有多少个点,满足以其他任意一点为起点都能到达该点. [解题思路] 如果这张有向图不连通,则一定没有点能被其他所有点到达,答案为0. 然后先用tarjan缩一波强连通分量 ...
- 依赖背包优化——ural1018,金明的预算方案
经典题了,网上博客一大堆O(nCC)的做法,其实是可以将复杂度降到O(nC)的 参考依赖背包优化(泛化物品的并) 根据背包九讲,求两个泛化物品的和复杂度是O(CC)的,所以依赖背包暴力求解的复杂度是O ...
- Android中滑屏实现----触摸滑屏以及Scroller类详解 .
转:http://blog.csdn.net/qinjuning/article/details/7419207 知识点一: 关于scrollTo()和scrollBy()以及偏移坐标的设置/取值问 ...
- 尚学python课程---15、python进阶语法
尚学python课程---15.python进阶语法 一.总结 一句话总结: python使用东西要引入库,比如 json 1.python如何创建类? class ClassName: :以冒号结尾 ...
- LeetCode刷题笔记-回溯法-分割回文串
题目描述: 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab"输出:[ ["aa", ...
- 剑指offer——02二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- 5-MySQL高级-事务-回滚(3)
回滚 为了演示效果,需要打开两个终端窗口,使用同一个数据库,操作同一张表 step1:连接 终端1 select * from goods_cates; step2:增加数据 终端2:开启事务,插入数 ...
- uoj33 【UR #2】树上GCD
题目 大致是长剖+\(\rm dsu\ on\ tree\)的思想 先做一个转化,改为对于\(i\in[1,n-1]\)求出有多少个\(f(u,v)\)满足\(i|f(u,v)\),这样我们最后再做一 ...