您的位置:首页 > 其它

POJ 1737 Connected Graph 递推

2015-02-05 10:57 489 查看
题目大意:求n个点能组成多少种无向连通图

多年的老心病终于干掉了- -

令f[i]表示i个点能组成多少种无向图

首先易知我们能生成2^(i*(i-1)/2)种图 但是一些是不合法的 我们要将不合法的干掉

枚举1号节点与多少个点连通

设1号节点所在联通块大小为j(1<=j<=i-1)

那么与1相连的其它点有C(i-1,j-1)中选法,1号节点所在联通块有f[j]种连法,不与1号节点相连的点有2^((i-j)*(i-j-1)/2)种连法

故得到递推式f[i]=2^(i*(i-1)/2)-Σ[1<=j<=i-1]C(i-1,j-1)*f[j]*2^((i-j)*(i-j-1)/2)

w = open("out.out", "w")

f = [0] * 60
C = [[0] * 60 for i in range(60)]

for i in range(0,51):
	C[i][0] = 1
	for j in range(1,i+1):
		C[i][j] = C[i-1][j] + C[i-1][j-1]
for i in range(1,51):
	f[i] = 2**(i*(i-1)//2)
	for j in range(1,i):
		f[i] -= C[i-1][j-1] * (2**((i-j)*(i-j-1)/2)) * f[j]
	w.write("\"%d\",\n" %f[i] )
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: