pku1737(求连通图个数,运用高精度加法,减法,乘法,组合数)

来源:互联网 发布:王司徒 知乎 编辑:程序博客网 时间:2024/06/05 09:43

http://162.105.81.212/JudgeOnline/problem?id=1737

题意: 一个无向图就是有v个顶点和e条边(E{V*V})构成的一个集合。如果一个无向图对于每个点对(u,v)都可以从u通过边到底v,那么这个图就是连通的,你的任务就是写一个程序来计算总共有多少个不同的包含n个顶点的连通的无向图;

分析:对于我老菜来说此题是很好很难的图论+数论。自己弄了很久,最后看了牛人的解题报告才弄明白,汗~废话少说贴下牛人的报告吧。

 

题目大致意思是给定n个点,求这n个点的连通图的个数。

g(n)表示n个点总共可以表示成几个图,因为总共有n*n-1/2条边,而这n*(n-1)/2中每条边连或不连有两种可能,所以g(n)=2^(n*(n-1)/2)

所以连通图的个数=总的图的个数-不是连通图的个数;

那令f(n)表示n个点的连通图的个数;

而不连通的图的个数是顶点数小于n的连通图的个数乘以剩下的顶点总共的图的个数,即

;如图 :

                  

所以

但是

真的是Cin吗,看一个例子

 

1)

    2

 

 

 

1)和2)其实是同一种状态,但是按 算选出(12)是一种,选出(34)是一种,所以产生了重复。

那么该怎么修改呢,其实只要固定一个点,假设是1,再从n-1个点中选出i-1个点去跟1构成连通图即Ci-1n-1,那样就可以避免重复了;

综上:

因为n=11时数据就已经达到

35641657548953344了;

N=12的话就超过__int64的范围了。

所以此题必然要用到高精度了。

在计算f,Cin的时候把f,Cin算出来后保存下来,避免重复计算,否则有可能超时。

还有个要注意的就是:计算Cin时可以用公式Cin= Ci-1n+Ci-1n-1,这样就可以用高精度加法递推出来了。

 

 

原创粉丝点击