无向连通图计数

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

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

钦定入度为 的点数,分配容斥系数使得

的容斥系数,对于真正的无入度点集合

更多操作:子图上的应用

perfur 序列

个点的数和长为 值域 的序列的双射。取出编号最小的叶子结点删去,将其父亲加 到序列末端。

n 个点有标号无根树数量 。确定度数之后 。已经形成 个连通块后

P6596

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