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}}\] 每个点是一样的 ...
随机推荐
- su、sudo、sudo su、sudo -i的用法和区别
sudo : 暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码.不过有时间限制,Ubuntu默认为一次时长15分钟.su : 切换到某某用户模式,提 ...
- Kali Linux 2.0安装光盘分享
Kali Linux 2.0安装光盘分享 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I ...
- Java中对象、对象引用、堆、栈、值传递以及引用传递的详解
Java中对象.对象引用.堆.栈.值传递以及引用传递的详解 1.对象和对象引用的差别: (1).对象: 万物皆对象.对象是类的实例. 在Java中new是用来在堆上创建对象用的. 一个对象能够被多个引 ...
- AutoCAD2004启动时出现fail to get CommcntrController的怎么办
解决AutoCAD2004启动时出现fail to get CommcntrController的问题! 2009-02-01 18:06 以前安装AutoCAD2004的时候可以用正常使用,后来又装 ...
- javascript获取星期
入门: var week = new Date().getDaty(); var ary = new Array("日","一","二",& ...
- hive分区(partition)简介
一.背景 1.在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作.有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念. 2.分区表指的是在创建表 ...
- 还需要学习的十二种CSS选择器
在前面的文章中,我们在介绍了<五种你必须彻底了解的CSS选择器>,现在向大家介绍,还需要学习的另外十二种CSS选择器.如果你还没有用过,就好好学习一下,如果你已经熟知了就当是温习. 一.X ...
- Java中的线程池ExecutorService
示例 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.u ...
- java 匿名类和匿名方法
package com.test; interface product{ int getPrice(); } public class News { /** * @param args */ publ ...
- 解决mysql数据库乱码问题
MySQL的SQL语言是用于访问数据库的最常用标准化语言.MySQL软件采用了双授权政策,它分为社区版和商业版,由于其体积小.速 度快.总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选 ...