解题报告(A,B,C)

来源:互联网 发布:网络ip地址设置 编辑:程序博客网 时间:2024/06/05 02:23

HUST/ACM08PC01解题报告(A,B,C)

A:

题目链接:

http://acm.hust.edu.cn/thx/problem.php?cid=1008&pid=0

题意:

一条直线上有n个点,只有相邻的点之间有边。直线外有两个点,分别与直线上的n

个点相连,但这两个点之间没有边。求这n+2个点可以构成的生成树的数目。

题解:

1,这个题目的原型是具体数学上的一个题目,但是直线外只有一个点,我只是将

其推广为两个点。

2,设直线外的两个点分别为点X和点Z,直线上的点分别为点Y(1)、Y(2)……Y(n)。

假设前n-1个点已经处理了,就算第n个点时候,就只与X、Y(n-1)和Z三个点有关,

不用考虑前面的点。则X、Y(n-1)和Z的关系就可以表示

为:{XY(n-1)Z}、{X:Y(n-1):Z}、{XY(n-1):Z}、{XZ:Y(n-1)}和{X:Y(n-1)Z}。(写

在一起表示在同一棵树上,用冒号隔开表示不在同一棵树上。)为了描述方便,在

下文中依次用F(n),G(n),H(n),I(n)和J(n)表示。

3,确定上面的5中关系,然后向其中添加第n个点。由于Y(n)与X、Y(n-1)和Z分别

有一条边相连,则将Y(n)加入的时候,一共有8中连边方式。所以将这5*8种情况算

出来,就可以得到地推关系式:

F(n) = 3*F(n-1) + G(n-1) + 2*H(n-1) + 2*I(n-1) + 2*J(n-1);

G(n) = G(n-1) + H(n-1) + J(n-1);

H(n) = G(n-1) + 2*H(n-1) + J(n-1);

I(n) = F(n-1) + I(n-1);

J(n) = G(n-1) + H(n-1) + 2*J(n-1);

4,得到递推式,然后就可以构造矩阵,用矩阵乘法来加速。

p1043矩阵

5,最后这个问题就解决了,时间复杂度是O(log n)的。上述方法是最朴实的做法了,cjq大牛用非常华丽的方法解了出来.

原创粉丝点击