首页 > 其他分享 >带标号二分图计数

带标号二分图计数

时间:2023-02-21 16:46:17浏览次数:54  
标签:标号 二分 连通 函数 poly 计数 math mod

本文中 \(f[i]\) 表示 \([x^i]f(x)\)

带标号的二分图的数量不方便用一个式子直接写出,我们考虑用别的统计去推出它。

我们先求出连通二分图的生成函数,再求任意二分图的生成函数。

二分图想到黑白染色,二分图黑白染色的方案是好得到的:令 \(f(x)\) 表示所有 \(n\) 个点的图的的黑白染色方案之和的生成函数,则有

\[f[n]=\sum_{i=0}^{n} \binom ni\times2^{i(n-i)} \]

稍微转化一下。

\[\dfrac {f[n]} {2^{n^2/2} \times n!}=\sum_{i=0}^{n} \dfrac 1 {i!(n-i)!\times2^{i^2/2}\times2^{(n-i)^2/2}} \]

就是加法卷积的形式了。

当一个二分图连通时,其黑白染色的方案等于 \(2\),所以找到连通二分图的黑白染色的生成函数就形了。

连通图——任意图 是一种典型的“集合——集族”关系,它们的指数生成函数满足以下关系:

其中任意图的指数生成函数为 \(g(x)\),连通图的为 \(f(x)\)

\[\operatorname{Exp}(f(x))=g(x) \]

做一次多项式 \(\operatorname{ln}\) 再对每一项除二得到二分连通图的指数生成函数,再使用“集合——集族”关系 \(\operatorname{Exp}\) 回去即可。

会发现上述过程等价于给 \(g(x)\) 开根,直接开根有更优秀的常数,时间复杂度都是 \(O(n\log n)\)。

主要部分(因为我没想到对 \(2\) 的指数做一些很妙的转化,就直接用了二次剩余来处理除二的问题。其中 \(b^2=2\) ):

n=1e5;
rep(i,0,n) f[i] = math::finv[i] * math::Pow(b,(ll)i*i%(mod-1)*(mod-2)) % mod ;
poly::work(n+n);
poly::NTT(f);
poly::pmul(f,f,f);
poly::iNTT(f);
poly::mem(f+n+1,poly::L-n);
rep(i,0,n) f[i]=(ll)f[i] * math::Pow(b,(ll)i*i) % mod;
poly::ln(f,n,g);
poly::nummul(g,n,i2,g);
poly::exp(g,n,f);
rep(i,1,n) wrt(f[i] * math::fac[i] % mod,'\n');

完整代码

标签:标号,二分,连通,函数,poly,计数,math,mod
From: https://www.cnblogs.com/Dreamerkk/p/17141530.html

相关文章

  • P2602 [ZJOI2010] 数字计数:数位DP
    https://www.luogu.com.cn/problem/P2602//#include<iostream>//#include<iomanip>//#include<unistd.h>//#include<climits>//#include<string>//#inclu......
  • [51Nod 1222] - 最小公倍数计数 (..怎么说 枚举题?)
    题面题目分析令则此处表示小于等于中,满足两个数互质且乘积为的无序数对的个数,显然其中表示d的质因子个数相当于把d的质因数分成两部分,所以就每个质因数选或不选,又因为......
  • 二分法查找数字位置
    二分法举例请实现无重复数字的升序数组的二分查找给定一个元素升序的、无重复数字的整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在......
  • 体验AI乐趣:基于AI Gallery的二分类猫狗图片分类小数据集自动学习
    摘要:直接使用AIGallery里面现有的数据集进行自动学习训练,很简单和方便,节约时间,不用自己去训练了,AIGallery里面有很多类似的有趣数据集,也非常好玩,大家一起试试吧。本文......
  • 插入二分排序
    一、\(STL\)版本的插入二分排序#include<bits/stdc++.h>usingnamespacestd;constintN=6;inta[N]={3,2,1,4,5,7};voidBinInsertSort(inta[],intn......
  • python 二分查找算法
    python二分查找算法 楔子如果有这样一个列表,让你从这个列表中找到66的位置,你要怎么做?l=[2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,......
  • 二分
    目录【整数二分】起止位置【小数二分】求算术平方根【二分答案】切割绳子二分本质给定一个具有单调性的区间\([l,r]\),中间切一刀\(mid=(l+r)/2;\)可以将区间分为两个......
  • 内存计数基础原理
    有new、alloc、copy(计数器加一),就得release(计数器减一)////Person.h//a1////Createdbymahongminon14-4-21.//Copyright(c)2014年mahongmin.Allright......
  • Educational Codeforces Round 143 (Rated for Div. 2) C(二分+差分维护)
    EducationalCodeforcesRound143(RatedforDiv.2)C(二分+差分维护)C.TeaTasting题目大意:给定n杯茶,n个人,一个进行n论赏茶,赏茶的规律如下:第1轮,第一个人喝第1杯茶,......
  • 字符分割并计数
    从文件中读取一行字符,对字符按逗号分割成单词,并计算每个单词出现次数#include<stdio.h>#include<stdlib.h>#include<string.h>typedefstructword{charstr[32......