I - Fibonacci Tree
题意:给你一个无向图,N个点,M条边。边有两种类型,白边的边权为1,黑边的边权为0,问在无向图对应的生成树集合中,是否存在一个生成树,其白色边的数量为斐波拉契数?
思路

思维转化
如果存在此生成树,其生成树对应的权值和即为白色边的数量。
(因为黑色边对应的权值为0,白色边对应的权值为1)

观察
无向图对应的生成数集合里面的元素太多,枚举不完,我们就不妨考虑集合的两个特殊元素,一个最小生成树,一个最大生成树。

思考
最小生成树是如何变成最大生成树的?权值和变化有什么规律?
假设最小生成树为A,最大生成树为B,从B中找到一个边(在A中未出现过的),其边权为1或0,再把此边加入A中,我们会发现成一个环(由树的性质可知),这环上我们只需要拿走一条在B中未出现的边即可,边权为1或0。这样,往A中加边,去边,A这棵树的权值变化范围为+1,+0,+(-1),因为我们知道A是最小生成树,所以不需要一开始考虑会+(-1)(如果会出现这种情况,A就不是最小生成树)。

通过证明,可以发现,A的权值和到B的权值和的过程是只能通过+1,+0,+(-1)得到,所以我们可以知道,在无向图对应的生成树集合中,权值变化范围[A的权值和,B的权值和]

斐波拉契数可以先预处理出来,然后遍历区间**[A的权值和,B的权值和]**,看有无即可
<如果觉得讲得不错,点个赞支持一下 ≥0≤ >

AC代码