bzoj5093: [Lydsy1711月赛]图的价值
不难想到考虑每个点的贡献,ans=n*sigema(1~n)i C(n-1,i)*(2^C(n-1,2))*i^k
直接套第二类斯特林拆柿子即可。提示:sigema(1~n)i C(n,i)*C(i,j) = C(n,j)*2^(n-j)
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
const int _=1e2;
const int maxK=2e5+_;
const int fbiK=(<<)+_;
const int mod=;
inline int ad(int x,int y){return (x>=mod-y)?(x-mod+y):x+y;}
inline int re(int x,int y){return (x<y)?(x-y+mod):x-y;}
inline int mu(int x,int y){return (LL)x*y%mod;}
inline int qp(int x,int y){int r=;while(y>){if(y&)r=mu(r,x);x=mu(x,x);y/=;}return r;} int fac[maxK],fac_inv[maxK],inv[maxK];
void yu(int K)
{
fac[]=;for(int i=;i<=K;i++)fac[i]=mu(fac[i-],i);
fac_inv[K]=qp(fac[K],mod-);
for(int i=K-;i>=;i--)fac_inv[i]=mu(fac_inv[i+],i+); inv[]=;for(int i=;i<=K;i++)inv[i]=mu(inv[mod%i],mod-mod/i);
} namespace GETS2
{
int Re[*fbiK];
void NTT(int *a,int n,int op)
{
for(int i=;i<n;i++)
if(i<Re[i])swap(a[i],a[Re[i]]);
for(int i=;i<n;i<<=)
{
int gn=qp(,(mod-)/(i<<));
if(op==-)gn=qp(gn,mod-);
for(int j=;j<n;j+=(i<<))
{
int g=;
for(int k=;k<i;k++,g=mu(g,gn))
{
int k1=a[j+k],k2=mu(a[j+k+i],g);
a[j+k]=ad(k1,k2);
a[j+k+i]=re(k1,k2);
}
}
}
if(op==-)
{
int inv=qp(n,mod-);
for(int i=;i<n;i++)a[i]=mu(a[i],inv);
}
}
int n,m,L,A[*fbiK],B[*fbiK],S2K[*fbiK];
void main(int K)
{
m=*K-;for(n=;n<=m;n<<=)L++;
for(int i=;i<n;i++)Re[i]=(Re[i>>]>>)|((i&)<<(L-)); for(int i=;i<=K;i++)
{
A[i]=mu((i&)?mod-:,fac_inv[i]);
B[i]=mu(qp(i,K),fac_inv[i]);
} NTT(A,n,),NTT(B,n,);
for(int i=;i<n;i++)S2K[i]=mu(A[i],B[i]);
NTT(S2K,n,-);
}
}
int S2[][];
void QWQ()
{
S2[][]=;
for(int i=;i<=;i++)
for(int j=;j<=i;j++)
S2[i][j]=ad(S2[i-][j-],mu(S2[i-][j],j));
} int main()
{
int n,K;
scanf("%d%d",&n,&K);yu(K);
GETS2::main(K);//QWQ(); using namespace GETS2;
int ans=,C=;
for(int j=;j<=K;j++)
{
C=mu(mu(C,n-j),inv[j]);
ans=ad(ans, mu( mu(S2K[j],fac[j]) , mu(C,qp(,n--j)) ) );
}
printf("%d\n", mu( mu(ans,n) , qp(,(LL)(n-)*(n-)/%(mod-)) ) ); return ;
}
bzoj5093: [Lydsy1711月赛]图的价值的更多相关文章
- BZOJ5093 [Lydsy1711月赛]图的价值 【第二类斯特林数 + NTT】
题目链接 BZOJ5093 题解 点之间是没有区别的,所以我们可以计算出一个点的所有贡献,然后乘上\(n\) 一个点可能向剩余的\(n - 1\)个点连边,那么就有 \[ans = 2^{{n - 1 ...
- bzoj 5093 [Lydsy1711月赛]图的价值 NTT+第二类斯特林数
[Lydsy1711月赛]图的价值 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 245 Solved: 128[Submit][Status][D ...
- 【bzoj5093】 [Lydsy1711月赛]图的价值 组合数+斯特林数+NTT
Description "简单无向图"是指无重边.无自环的无向图(不一定连通). 一个带标号的图的价值定义为每个点度数的k次方的和. 给定n和k,请计算所有n个点的带标号的简单无向 ...
- 【bzoj5093】[Lydsy1711月赛]图的价值(NTT+第二类斯特林数)
题意: 给定\(n\)个点,一个图的价值定义为所有点的度数的\(k\)次方之和. 现在计算所有\(n\)个点的简单无向图的价值之和. 思路: 将式子列出来: \[ \sum_{i=1}^n\sum_{ ...
- BZOJ 5093: [Lydsy1711月赛]图的价值
第二类斯特林数模版题 需要一些组合数的小$ trick$ upd:这里更新了本题巧妙的$ O(k)$做法,虽然常数很大就是了 传送门:here 题意:求所有$ n$个节点的无重边自环图的价值和,定义一 ...
- BZOJ 5093: [Lydsy1711月赛]图的价值 第二类斯特林数+NTT
定义有向图的价值为图中每一个点的度数的 \(k\) 次方之和. 求:对于 \(n\) 个点的无向图所有可能情况的图的价值之和. 遇到这种题,八成是每个点单独算贡献,然后累加起来. 我们可以枚举一个点的 ...
- bzoj5093:[Lydsy1711月赛]图的价值
题目 首先考虑到这是一张有标号的图,每一个点的地位是相等的,因此我们只需要求出一个点的价值和乘上\(n\)就好了 考虑一个点有多少种情况下度数为\(i\) 显然我们可以让除了这个点的剩下的\(n-1\ ...
- BZOJ 5093[Lydsy1711月赛]图的价值 线性做法
博主曾更过一篇复杂度为$O( k· \log k)$的多项式做法在这里 惊闻本题有$ O(k)$的神仙做法,说起神仙我就想起了于是就去学习了一波 幂与第二类斯特林数 推导看这里 $$ x^k=\sum ...
- BZOJ.5093.[Lydsy1711月赛]图的价值(NTT 斯特林数)
题目链接 对于单独一个点,我们枚举它的度数(有多少条边)来计算它的贡献:\[\sum_{i=0}^{n-1}i^kC_{n-1}^i2^{\frac{(n-2)(n-1)}{2}}\] 每个点是一样的 ...
随机推荐
- C++中的void类型
Technorati 标签: void,指针 1.1. void类型 void类型其实是一种用于语法性的类型,而不是数据类型,主要用于作为函数的参数或返回值,或者定义void指针,表示一种未知类型. ...
- Linux学习之十六-Linux用户管理
Linux用户管理 Linux系统跟Windows系统一样,可以创建不同的用户,不同的用户组.在不同用户下使用系统具有相应的权限 创建一个普通用户时,会修改几个文件,拷贝一些初始文件到用户家目录中 修 ...
- ANT安装及配置
首先,到http://ant.apache.org/找到合适的版本下载. 其次,讲下载的zip包解压,得到的目录拷贝到硬盘,如C:\apache-ant-1.9.4 其三,设置环境变量 ANT_HOM ...
- 《Linux设备驱动开发具体解释(第3版)》(即《Linux设备驱动开发具体解释:基于最新的Linux 4.0内核》)网购链接
<Linux设备驱动开发具体解释:基于最新的Linux 4.0内核> china-pub spm=a1z10.3-b.w4011-10017777404.30.kvceXB&i ...
- 如何在VS2010中添加ActiveX控件及使用方法
方法1: 1.首先在在项目上面右击添加类,如下图所示: 2.点击添加ActiveX控件中的MFC类 3.找到需要添加的ActiveX类. 4.点击完成即可. 5.此时转到资源视图,打开如下视图.可能工 ...
- iOS开发 - "Cast from pointer to smaller type 'int' loses information” 解决的方法
今天要写一个联系人搜索算法. 百度了下, 在code4App中找到相关代码. 可是自己跑了下, 发现报错. 错误内容例如以下: "Cast from pointer to smaller t ...
- 25:坐标移动CoordinateMove
题目描述 开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动.从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面. 输入: 合 ...
- jquery判断复选框是否被选中
$("#isUse").click(function(){ if($(this).is(':checked')){ $(this).attr('checked','checked' ...
- Android中BaseAdapter使用基础点
Android中要填充一些控件(如ListView)经常须要用到Adapter来实现,经常使用的有ArrayAdapter,SimpleAdapter, CursorAdapter,BaseAdapt ...
- ubuntu系统安装好后一些基本软件的安装
preface: 由于某些原因重装了系统,原来在ubuntu下安装的一些软件又要又一次安装.稍微麻烦,整理下须要安装的步骤. #==================================== ...