解题:BZOJ 5093 图的价值
显然只需要考虑一个点(再乘n),那么枚举这个点的度数,另外的$\frac{(n-1)(n-2)}{2}$条边是随意连的,而这个点连出去的边又和其余$n-1$个点产生组合,所以答案就是
$n*\frac{(n-1)(n-2)}{2}*\sum\limits_{i=0}^{n-1}C_{n-1}^i i^k$
运用第二类斯特林数和自然数幂的关系展开$i^k$,然后发现后面那一坨只要算到$min(n-1,k)$就可以了(再往后斯特林数就成零了)
于是问题变成了快速求一行第二类斯特林数,多项式卷积即可
- #include<cmath>
- #include<cstdio>
- #include<cctype>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- const int N=,mod=;
- int fac[N],inv[N],rev[N],a[N],b[N];
- int n,m,k,G,Gi,C,ans,pw[][];
- void Add(int &x,int y)
- {
- x+=y;
- if(x>=mod) x-=mod;
- }
- int Qpow(int x,int p)
- {
- if(p==) return ;
- if(p==) return x;
- int tmp=Qpow(x,p/);
- return p%?1ll*tmp*tmp%mod*x%mod:1ll*tmp*tmp%mod;
- }
- void Prework()
- {
- register int i;
- scanf("%d%d",&n,&k);
- fac[]=inv[]=;
- for(i=;i<=k;i++) fac[i]=1ll*fac[i-]*i%mod;
- inv[k]=Qpow(fac[k],mod-);
- for(i=k-;i;i--) inv[i]=1ll*inv[i+]*(i+)%mod;
- for(i=;i<=k;i++)
- {
- a[i]=i%?mod-inv[i]:inv[i];
- b[i]=1ll*Qpow(i,k)*inv[i]%mod;
- }
- m=; while(m<=*k) m<<=;
- for(i=;i<=m;i++)
- rev[i]=(rev[i>>]>>)+(i&)*(m>>);
- G=,Gi=Qpow(G,mod-);
- for(int i=;i<=;i++)
- {
- pw[i][]=Qpow(G,(mod-)/(<<i));
- pw[i][]=Qpow(Gi,(mod-)/(<<i));
- }
- }
- void Trans(int *arr,int len,int typ)
- {
- register int i,j,k;
- for(i=;i<len;i++)
- if(rev[i]>i) swap(arr[rev[i]],arr[i]);
- for(i=;i<=len;i<<=)
- {
- int lth=i>>,ort=pw[(int)log2(i)][typ==-];
- for(j=;j<len;j+=i)
- {
- int ori=,tmp;
- for(k=j;k<j+lth;k++,ori=1ll*ori*ort%mod)
- {
- tmp=1ll*ori*arr[k+lth]%mod;
- arr[k+lth]=(arr[k]-tmp+mod)%mod;
- arr[k]=(arr[k]+tmp)%mod;
- }
- }
- }
- if(typ==-)
- {
- int Ni=Qpow(len,mod-);
- for(i=;i<=len;i++)
- arr[i]=1ll*arr[i]*Ni%mod;
- }
- }
- int main()
- {
- register int i;
- Prework();
- Trans(a,m,),Trans(b,m,);
- for(i=;i<m;i++) a[i]=1ll*a[i]*b[i]%mod;
- Trans(a,m,-),C=; //for(int i=0;i<=m;i++) printf("%d ",a[i]);
- // for(int i=1;i<=n;i++) printf("%d %d\n",fac[i],inv[i]);
- for(i=;i<=min(n-,k);i++)
- {
- Add(ans,1ll*a[i]*fac[i]%mod*C%mod*Qpow(,n-i-)%mod);
- C=1ll*C*(n-i-)%mod*Qpow(i+,mod-)%mod;
- }
- int pw=1ll*(n-)*(n-)/%(mod-);
- printf("%lld",1ll*ans*n%mod*Qpow(,pw)%mod);
- return ;
- }
解题:BZOJ 5093 图的价值的更多相关文章
- [BZOJ 5093]图的价值
Description 题库链接 一个带标号的图的价值定义为每个点度数的 \(k\) 次方的和.给定 \(n\) 和 \(k\) ,请计算所有 \(n\) 个点的带标号的简单无向图的价值之和.对 \( ...
- bzoj 5093 图的价值 —— 第二类斯特林数+NTT
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5093 每个点都是等价的,从点的贡献来看,得到式子: \( ans = n * \sum\li ...
- BZOJ 5093: [Lydsy1711月赛]图的价值
第二类斯特林数模版题 需要一些组合数的小$ trick$ upd:这里更新了本题巧妙的$ O(k)$做法,虽然常数很大就是了 传送门:here 题意:求所有$ n$个节点的无重边自环图的价值和,定义一 ...
- bzoj 5093 [Lydsy1711月赛]图的价值 NTT+第二类斯特林数
[Lydsy1711月赛]图的价值 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 245 Solved: 128[Submit][Status][D ...
- BZOJ 5093: [Lydsy1711月赛]图的价值 第二类斯特林数+NTT
定义有向图的价值为图中每一个点的度数的 \(k\) 次方之和. 求:对于 \(n\) 个点的无向图所有可能情况的图的价值之和. 遇到这种题,八成是每个点单独算贡献,然后累加起来. 我们可以枚举一个点的 ...
- 【BZOJ5093】图的价值(第二类斯特林数,组合数学,NTT)
[BZOJ5093]图的价值(第二类斯特林数,组合数学,NTT) 题面 BZOJ 题解 单独考虑每一个点的贡献: 因为不知道它连了几条边,所以枚举一下 \[\sum_{i=0}^{n-1}C_{n-1 ...
- [CF932E]Team Work & [BZOJ5093]图的价值
CF题面 题意:求\(\sum_{i=0}^{n}\binom{n}{i}i^k\) \(n\le10^9,k\le5000\) 模\(10^9+7\) BZOJ题面 题意:求\(n*2^{\frac ...
- [BZOJ5093]图的价值(NTT+第二类Stirling数)
5093: [Lydsy1711月赛]图的价值 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 250 Solved: 130[Submit][Sta ...
- BZOJ5093图的价值(斯特林数)
题目描述 “简单无向图”是指无重边.无自环的无向图(不一定连通). 一个带标号的图的价值定义为每个点度数的k次方的和. 给定n和k,请计算所有n个点的带标号的简单无向图的价值之和. 因为答案很大,请对 ...
随机推荐
- 20155207 《网络对抗技术》EXP3 免杀原理与实践
20155207 <网络对抗技术>EXP3 免杀原理与实践 基础问题回答 杀软是如何检测出恶意代码的? - 根据特征码进行检测(静态) - 启发式(模糊特征点.行为 ) - 根据行为进行检 ...
- Python+Selenium爬取动态加载页面(1)
注: 最近有一小任务,需要收集水质和水雨信息,找了两个网站:国家地表水水质自动监测实时数据发布系统和全国水雨情网.由于这两个网站的数据都是动态加载出来的,所以我用了Selenium来完成我的数据获取. ...
- libgdx学习记录20——多线程MultiThread资源处理
在libgdx中,一般的逻辑流程都在rende()函数中执行,这个函数是由opengl的渲染线程调用的,一般的图形显示和逻辑处理都在这个线程中. 一般情形下,在这个线程中处理就行了.但是当某些逻辑处理 ...
- C#精华面试题及答案 三
PS.学了两三年的软件开发到头来发现连一些基本的东西都没掌握,通过面试题来检验自己的水平,让学习变得更加有方向性,也为将来择业而打下基础,不至于到时候手忙脚乱. 一.选择,填空题 1. 在ADO.NE ...
- linux下的tar命令详解
通过SSH访问服务器,难免会要用到压缩,解压缩,打包,解包等,这时候tar命令就是是必不可少的一个功能强大的工具.linux中最流行的tar是麻雀虽小,五脏俱全,功能强大. tar命令可以为linux ...
- Azure : 通过 SendGrid 发送邮件
SendGrid 是什么? SendGrid 是架构在云端的电子邮件服务,它能提供基于事务的可靠的电子邮件传递.并且具有可扩充性和实时分析的能力.常见的用例有:1. 自动回复用户的邮件2. 定期发送信 ...
- Beyond Compare文本对比中提示编辑禁止的解决方法
Beyond Compare是一款拥有文本比较功能的智能化软件,它支持在文本比较的同时,直接对差异文本进行修改.删除.编辑等一系列操作,这样一来,节约了文本对比的时间.但是在使用Beyond Comp ...
- Java+Netty、Vue+Element-UI实现的即时通信应用 leo-im
之前工作接触了几个开源的IM产品,再加上曾经用Netty实现过几个服务,于是就有了用Netty实现一个IM的想法,于是用业余时间写了一个IM,和喜欢Netty的程序员们分享. 考虑到方便扩展,在服务端 ...
- SPIR-V*:面向 OpenCL™ 工作负载的英特尔® 显卡编译器默认接口
英特尔® 显卡编译器最近从 SPIR* 转换到 SPIR-V*,作为面向 OpenCL™ 工作负载的中间表示.这看起来像编译器的内部变化,对用户来说不可见,但是这展示了我们支持 Khronos* 开放 ...
- 普通程序员看k8s的账户管理
一.知识准备 ● 账户管理分为:userAccount与serviceAccount ● userAccount:通常是给人设计使用的,并且userAccount不在k8s集群内管理 ● servic ...