ZJOI 2006 三色二叉樹

2021-08-22 07:28:19 字數 704 閱讀 8939

顯然是樹形dp,可以在狀態轉移的過程中順便把樹給建出來,定義 f[

i][j

] f[i

][j]

為當節點

i i

被染成顏色

j' role="presentation" style="position: relative;">j

j時,以

i i

為根的子樹中最多有多少個節點被染成綠色,g[

i][j

]' role="presentation" style="position: relative;">g[i

][j]

g[i]

[j]定義為對應的最小值,設計對應的狀態轉移方程即可。

兩者可以按照建樹的順序一起轉移,以提高時間效率,優化後的時間複雜度為 o(

n)o (n

)。

#include 

#include

const

int maxn=500005;

char s[maxn];int now,mx[maxn][3],mn[maxn][3];

void dp(int x)

else

if(s[x]=='1')

else

if(s[x]=='2')

}int main()

ZJOI2006 三色二叉樹 (樹形dp)

輸入格式 輸入檔名 tro.in 輸入檔案僅有一行,不超過500000個字元,表示乙個二叉樹序列。輸出格式 輸出檔名 tro.out 輸出檔案也只有一行,包含兩個數,依次表示最多和最少有多少個點能夠被染成綠色。輸入輸出樣例 輸入 1 1122002010輸出 1 5 2 有人做不出好像是因為沒讀懂題...

bzoj1864 Zjoi2006 三色二叉樹

傳送門 大力建出樹後大力dp 設f i j 表示以i為根節點,根節點顏色為j是的最優解。每次列舉當前結點節點顏色和兒子顏色,時間複雜度o n 27 uses math var a,b array 0.500005,1.3 of longint c array 0.500005 of longint ...

BZOJ1864 Zjoi2006 三色二叉樹

標籤 樹形dp description input 僅有一行,不超過500000個字元,表示乙個二叉樹序列。output 輸出檔案也只有一行,包含兩個數,依次表示最多和最少有多少個點能夠被染成綠色。sample input 1122002010 sample output 5 2題意 給定一棵二叉樹...