无向连通图计数
总方案数 ,减去不连通的方案数,枚举 所在连通块的大小。
加强版 P4841,分治 ntt 加速。
int n;
int f[maxn],g[maxn];
int fac[maxn],inv[maxn];
using ploy::mul;
void sovle(int l,int r){
if(l==r){
f[l]=(g[l]+mod-f[l]*fac[l-1]%mod)%mod;
return ;
}
int mid=l+r>>1;
sovle(l,mid);
vector<int> p(mid-l+1),q(r-l+1);
for(int i=l;i<=mid;i++)p[i-l]=f[i]*inv[i-1]%mod;
for(int i=1;i<=r-l;i++)q[i]=g[i]*inv[i]%mod;
vector<int> ans=mul(p,q);
for(int i=mid+1;i<=r;i++)inc(f[i],ans[i-l]);
sovle(mid+1,r);
}
void work(){
n=read();
fac[0]=1;for(int i=1;i<=n;i++)fac[i]=fac[i-1]*i%mod;
inv[n]=ksm(fac[n]);for(int i=n-1;~i;i--)inv[i]=inv[i+1]*(i+1)%mod;
for(int i=1;i<=n;i++)g[i]=ksm(2,i*(i-1)/2);
sovle(1,n);
printf("%lld\n",f[n]);
}
abc236h
钦定若干组组内相等,方案为 。状压,枚举包含 的子集乘方案数和容斥系数转移。
对于 个不等关系钦定 个相等相等的容斥系数为 。钦定组内相等的容斥系数为构成大小为 无向连通图的选边方案的容斥系数之和。
个点乱连的系数为 。减去不连通图的贡献, 个点的无向连通图的容斥系数和为 。
欧拉图计数
要求偶度数且连通。偶度数图的数量 , 乱连, 调整。连通的计数同无向连通图计数。
DAG计数
钦定入度为 的点数,分配容斥系数使得 。
P10221
设 表示 分为 个非空段形成 DAG 的方案, 为 分为 个非空段段间没有边的方案数。容斥系数同 DAG 计数,可以做到 。设 ,,拉插之后算系数,复杂度 。
perfur 序列
个点的数和长为 值域 的序列的双射。取出编号最小的叶子结点删去,将其父亲加 到序列末端。
n 个点有标号无根树数量 。确定度数之后 。已经形成 个连通块后 。
P6596
设 为 个点 条割边的 个边双的大小之积。。 个点双没有顺序,再除掉 。 为大小为 的无向连通图数量减去 的 再乘 。答案为 。