正题

题目链接:https://www.luogu.com.cn/problem/P5437


题目大意

\(n\)个点的完全图,连接\(i,j\)的边权值为\((i+j)^k\)。随机选出一个生成树,求期望边权和。

\(1\leq n<998244353,1\leq k\leq 10^7\)


解题思路

一条边选出来的概率是\(\frac{2}{n}\)(总共有\(\frac{2}{n(n-1)}\)条,选\(n-1\)条,或者\(Prufer\)序列也能证明)

所以现在考虑怎么求

\[\sum_{i=1}^n\sum_{j=1}^n(i+j)^k
\]

这个东西首先\(f(n)=\sum_{i=1}^n\sum_{j=1}^ni+j\)是一个二项式,所以\((i+j)^k\)就是一个\(k+2\)次多项式,所以可以考虑用拉插。

现在是如何快速求出\(1\sim k\)的值,考虑递推

\[f(n)-f(n-1)=\sum_{i=1}^n\sum_{j=1}^n(i+j)^k-\sum_{i=1}^{n-1}\sum_{j=1}^{n-1}(i+j)^k
\]
\[=\sum_{i=n+1}^{2n-1}i^k
\]

然后用线性筛预处理出\(i^k\)就好了。当然拉插也要用线性的优化

时间复杂度\(O(n)\)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1e7+10,P=998244353;
ll n,k,cnt,pri[N/5],w[N<<1],y[N];
ll pre[N],suf[N],inv[N],ans;
bool v[N<<1];
ll power(ll x,ll b){
ll ans=1;
while(b){
if(b&1)ans=ans*x%P;
x=x*x%P;b>>=1;
}
return ans;
}
void Prime(int n){
w[1]=1;
for(ll i=2;i<=n;i++){
if(!v[i])pri[++cnt]=i,w[i]=power(i,k);
for(ll j=1;j<=cnt&&i*pri[j]<=n;j++){
v[i*pri[j]]=1;w[i*pri[j]]=w[i]*w[pri[j]]%P;
if(i%pri[j]==0)break;
}
}
return;
}
signed main()
{
scanf("%lld%lld",&n,&k);
Prime(k*2+6);k+=3;pre[0]=suf[k+1]=inv[1]=1;
y[2]=w[3];
for(ll i=3;i<=k;i++)
y[i]=(y[i-1]+w[i*2-1]+w[i*2-2]-w[i])%P;
for(ll i=1;i<=k;i++)y[i]=(y[i-1]+y[i])%P;
for(ll i=1;i<=k;i++)pre[i]=pre[i-1]*(n-i)%P;
for(ll i=k;i>=1;i--)suf[i]=suf[i+1]*(n-i)%P;
for(ll i=2;i<=k;i++)inv[i]=P-inv[P%i]*(P/i)%P;
inv[0]=1;
for(ll i=1;i<=k;i++)inv[i]=inv[i-1]*inv[i]%P;
for(ll i=1;i<=k;i++)
(ans+=pre[i-1]*suf[i+1]%P*inv[i-1]%P*inv[k-i]%P*y[i]%P*(((k-i)&1)?-1:1))%=P;
printf("%lld\n",(ans+P)%P*power(n,P-2)%P*2%P);
return 0;
}

P5437-[XR-2]约定【拉格朗日差值,数学期望】的更多相关文章

  1. [51nod]1229 序列求和 V2(数学+拉格朗日差值)

    题面 传送门 题解 这种颓柿子的题我可能死活做不出来-- 首先\(r=0\)--算了不说了,\(r=1\)就是个裸的自然数幂次和直接爱怎么搞怎么搞了,所以以下都假设\(r>1\) 设 \[s_p ...

  2. E - Guess the Root 拉格朗日差值法+交互

    题目传送门 题意:告诉你存在一个未知项系数最高为10的$f(x)$,你最多可以有50次询问,每次询问给出一个$x'$,系统会返回你$f(x')$的值,你需要猜一个$x''$,使得$f(x'')=0$, ...

  3. 奇妙的算法【10】TX--有效号码、最,小耗时、最小差值、差值输出、异或结果

    昨晚刚刚写的几道算法题,难度也还行,就是全部AC有些困难,当时第一题AC.第二题AC 60%,第四题AC 40%,第五题没有时间写完了,这个应该全部AC了:其中第三题没有写出来 1,是否存在符合规范的 ...

  4. JAVA中计算两个日期时间的差值竟然也有这么多门道

    上半年春招的时候,作为面试官,对于面试表现的不错的同学会要求其写一小段代码看看.题目很简单: 给定一个日期,然后计算下距离今天相差的天数. 本以为这么个问题就是用来活跃面试氛围的,但是结果却让人大跌眼 ...

  5. PHP中比较两个时间的大小与日期的差值

    在这里我们全用到时间戳 mktime(hour,minute,second,month,day,year,[is_dst])     其参数可以从右向左省略,任何省略的参数都会被设置成本地日期和时间的 ...

  6. 用Scala实现集合中相邻元素间的差值

    欢迎转载,转载请注明出处,徽沪一郎. 概要 代码这东西,不写肯定不行,新学Scala不久,将实际遇到的一些问题记录下来,日后也好查找. 今天讲的是如何计算同一集合中元素两两之间的差值,即求开始集合(a ...

  7. 输出有序数组的中两个元素差值为指定值diff的两个元素

    题目: 输出有序数组的中两个元素差值为指定值diff的两个元素. 思路: 这与输出两个元素的和的值为一定值类似,需要两个指针,不同的是:指针不是一左一右,而是一前一后. 如果差值等于diff,则返回: ...

  8. php 算法之切割数组,不用array_chunk(),算法之二,取数组的差值,不用array_diff()

    用php写算法切割数组,不用array_chunk();算法例如以下所看到的. <?php //$array 数组 //$size 每一个数组的个数 //每一个数组元素是否默认键值 functi ...

  9. 题目1096:日期差值(a-b=(a-c)-(b-c))

    http://ac.jobdu.com/problem.php?pid=1096 题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据,每 ...

随机推荐

  1. ASP.NET Core教程:ASP.NET Core中使用Redis缓存

    参考网址:https://www.cnblogs.com/dotnet261010/p/12033624.html 一.前言 我们这里以StackExchange.Redis为例,讲解如何在ASP.N ...

  2. 【springcloud】Zuul高级配置(zuul--2)

    转自:https://blog.csdn.net/pengjunlee/article/details/87162192 自定义路由规则 在<API Gateway 的路由和过滤(Zuul)&g ...

  3. 模拟文件上传(三):使用apache fileupload组件进行文件批量上传

    其中涉及到的jar包 jsp显示层: <%@ page language="java" import="java.util.*" pageEncoding ...

  4. MySQL-后知知觉的索引

       什么是索引? 索引在MySQL中也叫做"键",是存储引擎用于快速找到记录的一种数据结构.索引对于良好的性能 非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重 ...

  5. 四种cmd打开方式

    四种cmd打开方式: 开始+系统+命令提示符: Win+R 输入cmd回车(推荐使用): 按住shift键加右键,点击打开PowerShell窗口: 资源管理器的地址栏前加入cmd+空格

  6. Python - 面向对象编程 - 三大特性之多态

    前置知识 封装 详解文章:https://www.cnblogs.com/poloyy/p/15203989.html 封装根据职责将属性.方法封装到一个抽象的类中 定义类的准则-封装 继承 详解文章 ...

  7. java 使用匿名内部类实现多线程的创建

    匿名内部类的作用:简化代码 把子类继承父类,重写父类的方法,创建子类对象合一步完成 把实现类实现类接口,重写接口中的方法,创建实现类对象合成一步完成 匿名内部类的最终产物:子类/实现类对象,而这个类没 ...

  8. 快速模式第二包: quick_inI1_ouR1()

    文章目录 1. 序言 2. quick_inI1_outR1()流程图 3. 快速模式消息②数据包格式 4. 源码分析 4.1 quick_inI1_outR1() 4.2 quick_inI1_ou ...

  9. redis存取数据Set

    一.set集合无序不重复 二.存取数据 1. 2. 3. 4.set集合差集运算 找出并返回前面集合有后面没有的元素: 5.set集合交际运算 6.并集运算 sunion 7.随机弹出一个元素,因为s ...

  10. EL-ADMIN学习笔记

    一,支持接口限流,避免恶意请求导致服务层压力过大 常见的限流功能一般有两个关注点: 1.限流原则,即以什么样的条件对请求进行识别以及放行.常见的作法是给予每个调用API的系统不同的唯一编码,用于监控某 ...