jzoj6287 扭動的樹 區間dp

2021-09-26 01:25:12 字數 1343 閱讀 6620

一顆二叉查詢樹,以key

ikey_i

keyi

​為建值,以p

ip_i

pi​為價值。然後乙個節點的sum

sumsu

m定義為這棵子樹的價值之和。

要求相鄰兩個節點不互質的情況下所有節點的最大sum

sumsu

m值之和。

二叉查詢樹滿足中序遍歷的建值從小到大,所以我們考慮區間dpdp

dp。每次將兩個區間組成的二叉樹合併在一起。

我們預處理出哪些節點可以相鄰

設f 0/

1,i,

jf_

f0/1,i

,j​表示作為將作為左邊/右邊的子樹與上將上乙個合併過來(根為i/j

i/ji/

j且沒有另一邊子樹)時的最大價值。

那麼我們可以得出動態轉移方程

f 0,

i,j=

f1,i

,k,+

f0,k

+1,j

(vi−

1,k)

f_=f_,+f_(v_)

f0,i,j

​=f1

,i,k

​,+f

0,k+

1,j​

(vi−

1,k​)f1

,i,j

=f1,

i,k,

+f0,

k+1,

j(vk

,j+1

)f_=f_,+f_(v_)

f1,i,j

​=f1

,i,k

​,+f

0,k+

1,j​

(vk,

j+1​

)

#include

#include

#include

#define ll long long

using

namespace std;

const ll n=

310;

struct nodea[n]

;ll n,f[2]

[n][n]

,ans,s[n]

;bool v[n]

[n];

bool

cmp(node x,node y)

intmain()

for(ll l=

2;l<=n;l++)}

}if(ans<0)

printf

("-1");

else

printf

("%lld"

,ans)

;}

JZOJ5077 樹的難題

給定一棵 n 個點的無根樹,樹上每一條邊都有顏色。一共 m種顏色,編號從 1 到m。第 i 種顏色權值為ci 對於樹上的一條簡單路徑,路徑上經過的所有邊按照順序組成乙個顏色序列,序列可以劃分成若干個相同顏色段。定義路徑權值為顏色序列上每乙個同顏色段的顏色權值之和。你要計算出邊數在 l r 之內的所有...

jzoj3555 樹的直徑

科學家在觀測一棵大樹,這棵樹在不斷地生長,科學家給這棵樹的每個節點編了號。開始的時候,這棵樹很小只有4個節點,一號點為根,其他三個節點掛在上面。在接下來的m次觀察中,科學家每次都能看見這棵樹從葉子處長出新的兩個節點來。如果當前這棵樹有n個節點,那麼這棵樹的新的兩個節點的編號分別為n 1,n 2。科學...

Jzoj3555 樹的直徑

科學家在觀測一棵大樹,這棵樹在不斷地生長,科學家給這棵樹的每個節點編了號。開始的時候,這棵樹很小只有4個節點,一號點為根,其他三個節點掛在上面。在接下來的m次觀察中,科學家每次都能看見這棵樹從葉子處長出新的兩個節點來。如果當前這棵樹有n個節點,那麼這棵樹的新的兩個節點的編號分別為n 1,n 2。科學...