[P4841]无向连通图计数与生成函数

今天对于生成函数有了一个初步的认识:
生成函数是一个多项式,我们令他为F。
则F=a0+a1*x+a2*x^2+a3*x^3........an*x^n
我们在数组中保留的则是a0,a1,a2........an
生成函数有这样的性质:
F^x(an)=sigma (b是一个n的自然数分解)a[b1]*a[b2]*a[b3]......
所以在P4841中,生成函数有了用武之地。
对于一张无向图,他一定是由若干个联通块构成的。
所以,若令无标号无向图的方案数的生成函数为F,无标号无向联通图的方案数的生成函数为G,则有:
F=sigma (i∈(1,+∞))G^i/i!
右边那项就是e^G的麦克劳林级数。
所以有F=e^G
两边同时ln得
G=ln(F)
多项式ln即可。

原文地址:https://www.cnblogs.com/thedreammaker/p/10986458.html

时间: 2024-08-30 15:26:46

[P4841]无向连通图计数与生成函数的相关文章

【XSY1295】calc n个点n条边无向连通图计数 prufer序列

题目大意 求\(n\)个点\(n\)条边的无向连通图的个数 \(n\leq 5000\) 题解 显然是一个环上有很多外向树. 首先有一个东西:\(n\)个点选\(k\)个点作为树的根的生成森林个数为: \[ \binom{n}{k}\times n^{n-k-1}\times k \] 前面\(\binom{n}{k}\)是这些根的选编号的方案数,后面是prufer序列得到的:前面\(n-k-1\)个数可以是\(1\)~\(n\),第\(n-k\)个数是\(1\)~\(k\). 我的理解是:每个

城市规划[多项式、连通图计数]

求出n个点的简单(无重边无自环)无向连通图数目,$n <= 130000$,$mod 1004535809$ 设$f_i$表示i个点的无向连通图数,连通图计数的套路,枚举1号点所在的连通块大小 \begin{array}{rcl}f_n&=&2^{C_n^2}-\sum\limits_{i=1}^{n-1}\binom{n-1}{i-1}f_i 2^{C_{n-i}^2}\\f_n&=&2^{C_n^2}-(n-1)!\sum\limits_{i=1}^{n-1}\f

LG5900 无标号无根树计数

有依赖的辅助多项式分治卷积 \[ g_n=\bigoplus_{i=1}^nf_i\f_n=\sum_{i=1}^{n-1}f_ig_{n-i} \] 已知 \(f_0=g_0=0,f_1=1\),求 \(f_2\sim f_n\).对 \(998244353\) 取模. \(n \leq 10^5\). 题解 这类问题的特点: 只有 \(f_1\sim f_n\) 都求出后,\(g_n\) 才能被算出. 卷积的时候不需要 \(g_n\). 普通的分治卷积策略是: \[ (f_l\sim f_{

求无向连通图的割点

求一个连通图的割点,割点的定义是,如果除去此节点和与其相关的边,图不再连通. 连通图的定义:如果图中任意两点都是连通的,那么图被称作连通图.如果此图是有向图,则称为强连通图(注意:需要双向都有路径) 割点:在无向连通图中,删除一个顶点v及其相连的边后,原图从一个连通分量变成了两个或多个连通分量,则称顶点v为割点,同时也称关节点 (Articulation Point).多连通图没有割点,若在多连通图上至少删去k个顶点才能破坏图的连通性,则称此图为k连通图.貌似有向连通图没有割点这个说法. 连通分

ZOJ 2588 Burning Bridges(无向连通图求割边)

题目地址:ZOJ 2588 由于数组开小了而TLE了..这题就是一个求无向连通图最小割边.仅仅要推断dfn[u]是否<low[v],由于low指的当前所能回到的祖先的最小标号,增加low[v]大于dfn[u]时,说明v无法通过其它边回到u之前的点.也就是说v假设想要回到u的祖先点.必需要经过u点,那这条边非常明显就是一条割边.这题还要去重边,假如有重边的话.说明怎么销毁哪条边总能通过还有一条边,所以仅仅要有重边.说明这两点之间没有割边. 代码例如以下: #include <iostream&g

设计一个算法,採用BFS方式输出图G中从顶点u到v的最短路径(不带权的无向连通图G採用邻接表存储)

思想:图G是不带权的无向连通图.一条边的长度计为1,因此,求带顶点u和顶点v的最短的路径即求顶点u和顶点v的边数最少的顶点序列.利用广度优先遍历算法,从u出发进行广度遍历,类似于从顶点u出发一层一层地向外扩展,当第一次找到顶点v时队列中便包括了从顶点u到顶点v近期的路径,如图所看到的,再利用队列输出最路径(逆路径),所以设计成非循环队列. 相应算法例如以下: typedef struct  { int data;//顶点编号 int parent;//前一个顶点的位置 } QUEUE;//非循环

设计一个算法,采用BFS方式输出图G中从顶点u到v的最短路径(不带权的无向连通图G采用邻接表存储)

思想:图G是不带权的无向连通图,一条边的长度计为1,因此,求带顶点u和顶点v的最短的路径即求顶点u和顶点v的边数最少的顶点序列.利用广度优先遍历算法,从u出发进行广度遍历,类似于从顶点u出发一层一层地向外扩展,当第一次找到顶点v时队列中便包含了从顶点u到顶点v最近的路径,如图所示,再利用队列输出最路径(逆路径),所以设计成非循环队列. 对应算法如下: typedef struct  { int data; //顶点编号 int parent; //前一个顶点的位置 } QUEUE; //非循环队

POJ 3352 Road Construction(无向连通图)

题目地址:POJ 3352 这题就是求最少加多少条边可以使得图为无向双连通图.方法是找度数为1的连通分量,可以只用low来找.然后根据公式(叶子结点数+1)/2即可得到答案.原因是在图中将每两个度数为1的都连起来,度数为2的显然已经可以形成双联通了,因为是无向边,只要加一条,就相当于加了两条有向边,很显然,结果数就是那个公式. 代码如下: #include <iostream> #include <cstdio> #include <string> #include &

无向连通图图求割点

概念: 割点:在一个无相连通图中,如果删除某个顶点后,图不再连接(即任意两点之间不再相互到达),我们称这样的顶点为割点(或者称为割顶). 思考: 很容易想到的方法是:以此删除每个顶点,然后用深度优先搜索或者广度优先搜索来检查图是否依然连通.如果删除某个顶点后,,导致图不再联通,那么刚才删除的顶点就是割点,但是这种方法复杂度太高,所以需要换一种方法: 首相我们从图中的任意顶点开始对图进行遍历,我们在遍历的时候一定会遇到割点(废话),关键是如何确认一个顶点是割点. 假如我们深度优先遍历事访问到了k点