树上三角形(斐波那契数列神奇应用)

Posted Nepenthe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树上三角形(斐波那契数列神奇应用)相关的知识,希望对你有一定的参考价值。

树上三角形(斐波那契数列神奇应用)

Description
给定一个大小为 n 的有点权树,需要支持两个操作。
0:询问(u,v),能否在 u 到 v 的简单路径上取三个点,使这三个点的点权作为边
长可以构成一个三角形。
1:修改某个点的点权。

Input
第一行两个整数 n,q 表示树的点数和操作数。
第二行 n 个整数表示 n 个点的初始的点权。
接下来 n-1 行,每行两个整数 a,b,表示 a 是 b 的父亲。
接下来 q 行,每行三个整数 op,a,b:
若 op=0,则表示询问(a,b)。
若 op=1,则表示将 a 的点权修改为 b。

Output
对每个询问输出一行表示答案,“Y”表示有解,“N”表示无解,(不包括引号)

Sample Input
5 5
1 2 3 4 5
1 2
2 3
3 4
1 5
0 1 3
0 4 5
1 1 4
0 2 5
0 2 3

Sample Output
N
Y
Y
N

Sample Explaination
对于前 10%的数据,n,q<=100
对于前 30%的数据,n,q<=1000
对于另外 40%的数据,无修改操作
对于 100%的数据,n,q<=100000,点权范围[1,2^31-1]


Hint

我们分析三个点权值a,b,c怎么才能构成三角形:
若a,b,c构成三角形,则a+b>c且|a-b|c这一个条件,我们要使它不满足,最低的要求是使a+b=c.
于是我们得到了一个式子:c=a+b
有没有很眼熟?

斐波那契数列
我们要使一些值构不成三角形,最坏情况就是它们构成一个斐波那契数列.
1 1 2 3 5 8 13 21………
也就是说斐波那契数列有一个神奇的性质:
以斐波那契数列中任意三项的值为长的三条线段一定构不成三角形
我们推斐波那契数列,发现第50项左右就爆int了
而题意中限制了点权一定在int内,
所以一条路径若是长度超过50,它最坏情况就是有斐波那契数列在int里的那些项,然后还有一些其他的值,那么我们一定可以找到一组a,b,c构成三角形.
而对于长度不超过50的路径,我们直接暴力瞎搞就可以了

以上是关于树上三角形(斐波那契数列神奇应用)的主要内容,如果未能解决你的问题,请参考以下文章

斐波那契数列的介绍?

什么是斐波那契数列?在日常生活中有什么实例?

斐波那契数列算法

阶乘斐波那契数列打印三角形(*)递归,冒泡排序

斐波那契数列在生活中都有哪些典型的应用

2021/6/10 刷题笔记斐波那契数列+泰波那契数