首页 > 其他 > 详细

POJ 1737 Connected Graph 递推

时间:2015-02-05 11:15:27      阅读:229      评论:0      收藏:0      [点我收藏+]

题目大意:求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] )


POJ 1737 Connected Graph 递推

原文:http://blog.csdn.net/popoqqq/article/details/43525019

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!