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]
我們分析三個點權值a,b,c怎麼才能構成三角形:
若a,b,c構成三角形,則a+b>c且|a-b|
斐波那契數列
我們要使一些值構不成三角形,最壞情況就是它們構成乙個斐波那契數列.
1 1 2 3 5 8 13 21………
也就是說斐波那契數列有乙個神奇的性質:
以斐波那契數列中任意三項的值為長的三條線段一定構不成三角形
我們推斐波那契數列,發現第50項左右就爆int了
而題意中限制了點權一定在int內,
所以一條路徑若是長度超過50,它最壞情況就是有斐波那契數列在int裡的那些項,然後還有一些其他的值,那麼我們一定可以找到一組a,b,c構成三角形.
而對於長度不超過50的路徑,我們直接暴力瞎搞就可以了
斐波那契 偷木棍破壞三角形
hdu 5914 題意 輸入n表示某人有1,2,3,4 n,一共n根木棍,求偷走幾根木棍後某人無法將剩餘的木棍組成三角形。題解 由於長度越大越容易組成三角,先用s i 標記可以留下那些長度的木棍。貪心思想,留下的長度盡可能小,為後面的留空間 1,2,3,x,5,x,x,8,x,x,x,x,13 大概...
HDU 6601 三角形 主席樹 斐波那契數列
給n個邊的長度,詢問q次,每次詢問回答能構成的三角形的最大周長。n和q都是1e5 1e51e 5的範圍。先想想如果就給乙個陣列求最大周長三角形的做法。容易想到就是排個序,從大到小列舉n 2次,每次檢查三條邊能不能構成三角形,如果不行,那麼最大的那條邊就沒有其他邊可以跟他組了,其他邊都更小 如果遇到了...
樹上三角形
description 給定一大小為n的有點權樹,每次詢問一對點 u,v 問是否能在u到v的簡單路徑上取三個點權,以這三個權值為邊長構成乙個三角形。同時還支援單點修改。input 第一行兩個整數n q表示樹的點數和運算元 第二行n個整數表示n個點的點權 以下n 1行,每行2個整數a b,表示a是b的...