无向连通图计数

总方案数 ,减去不连通的方案数,枚举 所在连通块的大小。

加强版 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

个点 条割边的 个边双的大小之积。 个点双没有顺序,再除掉 为大小为 的无向连通图数量减去 再乘 。答案为