思路:

显然每个子图内都是森林

去掉所有子图1和n都连通且每条大边都存在的情况

直接DP上

NTT优化一波

注意前两项的值..

//By SiriusRen
#include <bits/stdc++.h>
using namespace std;
const int mod=,N=;
int cases,n,R[N],fac[N],inv[N],A[N],B[N],h[N],f[N],g[N],jy;
int power(int x,int y){
int r=;
while(y){
if(y&)r=1ll*x*r%mod;
x=1ll*x*x%mod,y>>=;
}return r;
}
void NTT(int *a,int f,int m){
int L=,n;
for(n=;n<m;n<<=)L++;
for(int i=;i<n;i++)R[i]=(R[i>>]>>)|((i&)<<(L-));
for(int i=;i<n;i++)if(i<R[i])swap(a[i],a[R[i]]);
for(int l=;l<n;l<<=){
int wn=power(,((mod-)/(l<<)*f+(mod-))%(mod-));
for(int j=;j<n;j+=(l<<)){
int w=;
for(int k=;k<l;k++,w=1ll*w*wn%mod){
int x=a[j+k],y=1ll*w*a[j+k+l]%mod;
a[j+k]=(x+y)%mod,a[j+k+l]=(x-y+mod)%mod;
}
}
}
if(f==-){
int ni=power(n,mod-);
for(int i=;i<n;i++)a[i]=1ll*a[i]*ni%mod;
}
}
void cdq(int l,int r){
if(l==r){
if(l==)f[l]=;
else f[l]=(1ll*f[l]*fac[l-]+1ll*h[l]*fac[l-])%mod;
return;
}
int mid=(l+r)>>;
cdq(l,mid);
int len1=mid-l+,len2=r-l+,len=;
while(len<len1+len2)len<<=;
for(int i=;i<len1;i++)A[i]=1ll*f[l+i]*inv[l+i]%mod;
for(int i=len1;i<len;i++)A[i]=;
for(int i=;i<len2;i++)B[i]=h[i];
for(int i=len2;i<len;i++)B[i]=;
NTT(A,,len),NTT(B,,len);
for(int i=;i<len;i++)A[i]=1ll*A[i]*B[i]%mod;
NTT(A,-,len);
for(int i=mid+;i<=r;i++)f[i]=(f[i]+A[i-l])%mod;
cdq(mid+,r);
}
void init(){
fac[]=h[]=;
for(int i=;i<=;i++)fac[i]=1ll*fac[i-]*i%mod;
inv[]=power(fac[],mod-);
for(int i=;~i;i--)inv[i]=1ll*inv[i+]*(i+)%mod;
for(int i=;i<=;i++)h[i]=1ll*power(i,i-)*inv[i-]%mod;
cdq(,),f[]=;
for(int i=;i<;i++)A[i]=B[i]=;
for(int i=;i<=;i++)A[i]=1ll*f[i]*inv[i]%mod;
B[]=B[]=;
for(int i=;i<=;i++)B[i]=1ll*h[i]*(i-)%mod;
NTT(A,,),NTT(B,,);
for(int i=;i<;i++)g[i]=1ll*A[i]*B[i]%mod;
NTT(g,-,),g[]=;
for(int i=;i<=;i++)g[i]=1ll*g[i]*fac[i-]%mod;
}
int main(){
scanf("%d",&cases),init();
while(cases--){
scanf("%d",&n);int a1=,a2=;
for(int i=;i<=n;i++)scanf("%d",&jy),a1=1ll*a1*f[jy]%mod,a2=1ll*a2*g[jy]%mod;
printf("%lld\n",(1ll*a1*power(,n)%mod-a2+mod)%mod);
}
}

HDU 5279 分治NTT 图的计数的更多相关文章

  1. BZOJ 3456 NTT图的计数 容斥

    思路: RT 懒得写了 //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm&g ...

  2. HDU 5552 Bus Routes(2015合肥现场赛A,计数,分治NTT)

    题意  给定n个点,任意两点之间可以不连边也可以连边.如果连边的话可以染上m种颜色. 求最后形成的图,是一个带环连通图的方案数. 首先答案是n个点的图减去n个点能形成的树. n个点能形成的树的方案数比 ...

  3. HDU 5279 YJC plays Minecraft (分治NTT优化DP)

    题目传送门 题目大意:有$n$个小岛,每个小岛上有$a_{i}$个城市,同一个小岛上的城市互相连接形成一个完全图,第$i$个小岛的第$a_{i}$个城市和第$i+1$个小岛的第$1$个城市连接,特别地 ...

  4. 【PKUSC2019】线弦图【计数】【树形DP】【分治FFT】

    Description 定义线图为把无向图的边变成点,新图中点与点之间右边当且仅当它们对应的边在原图中有公共点,这样得到的图. 定义弦图为不存在一个长度大于3的纯环,纯环的定义是在环上任取两个不相邻的 ...

  5. HDU 6270 Marriage (2017 CCPC 杭州赛区 G题,生成函数 + 容斥 + 分治NTT)

    题目链接  2017 CCPC Hangzhou Problem G 题意描述很清晰. 考虑每个家庭有且仅有$k$对近亲的方案数: $C(a, k) * C(b, k) * k!$ 那么如果在第$1$ ...

  6. HDU 5322 Hope (分治NTT优化DP)

    题面传送门 题目大意: 假设现在有一个排列,每个数和在它右面第一个比它大的数连一条无向边,会形成很多联通块. 定义一个联通块的权值为:联通块内元素数量的平方. 定义一个排列的权值为:每个联通块的权值之 ...

  7. [gdoi2018 day1]小学生图论题【分治NTT】

    正题 题目大意 一张随机的\(n\)个点的竞赛图,给出它的\(m\)条相互无交简单路径,求这张竞赛图的期望强联通分量个数. \(1\leq n,m\leq 10^5\) 解题思路 先考虑\(m=0\) ...

  8. 【BZOJ-3456】城市规划 CDQ分治 + NTT

    题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=3456 Solution 这个问题可以考虑dp,利用补集思想 N个点的简单图总数量为$2^{ ...

  9. [hdu 6184 Counting Stars(三元环计数)

    hdu 6184 Counting Stars(三元环计数) 题意: 给一张n个点m条边的无向图,问有多少个\(A-structure\) 其中\(A-structure\)满足\(V=(A,B,C, ...

随机推荐

  1. airfoil polar data during post stall stages (high AOA)

    airfoil polar data during post stall stages (high AOA) Table of Contents 1. airfoil polar during pos ...

  2. Ajax_数据格式_HTML

    [数据格式提要] 1.在服务器端Ajax是一门与语言无关的技术.在业务逻辑层使用何种服务器端语言都可以. 2.从服务器端接收数据的时候,那些数据必须以浏览器能够理解的格式来发送.服务器端的编程语言只能 ...

  3. Docker定制镜像

    定制镜像 除了使用定制好的镜像外,我们也可以通过定制实现符合自己环境的镜像. 在docker里面通过build方法来生成镜像,在生成镜像之前,我们需要一个Dockerfile脚本,脚本中包含的是一条一 ...

  4. Spark在Executor上的内存分配

    spark.serializer (default org.apache.spark.serializer.JavaSerializer )    建议设置为 org.apache.spark.ser ...

  5. HDU 1542 Atlantics 线段树+离散化扫描

    将 x 轴上的点进行离散化,扫描线沿着 y 轴向上扫描 每次添加一条边不断找到当前状态有效边的长度 , 根据这个长度和下一条边形成的高度差得到一块合法的矩形的面积 #include<iostre ...

  6. C++标准库:bitset 用法整理&&zoj 3812

    转载: http://happyboy200032.blog.163.com/blog/static/46903113201291252033712/ 头文件:#include <bits/st ...

  7. 关于${ctx}拿不到值的问题

    当项目开发时我们喜欢用 <c:set var="ctx" value="${pageContext.request.contextPath}"/>来 ...

  8. mongodb片健的选取及更改

    1.总的原则:选键的时候多考虑以下问题. 写操作是怎么样的,有多大? 系统每小时会写多少数据,每天呢,高峰期呢 那些字段是随机的,那些是增长的 读操作是怎么样的,用户在访问那些数据 数据索引做了吗?应 ...

  9. sql-server-internals-architecture

    http://kevinekline.com/slides/sql-server-internals-architecture/

  10. 2 instances of postgresql but I really need one [closed]

    I happen to have 2 installed instances of postgresql at my machine: 9.1 and 9.2: sudo service postgr ...