码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-02-07 19:58:35      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:大小   soa   let   otn   引号   gpo   mda   jea   plain   

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

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的路径,我们直接暴力瞎搞就可以了

?

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

标签:大小   soa   let   otn   引号   gpo   mda   jea   plain   

原文地址:https://www.cnblogs.com/LonelyRyan/p/8427566.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!