BZOJ1864 Zjoi2006 三色二叉樹

2022-02-06 03:21:32 字數 800 閱讀 7377

僅有一行,不超過500000個字元,表示乙個二叉樹序列。

輸出檔案也只有一行,包含兩個數,依次表示最多和最少有多少個點能夠被染成綠色。

1122002010

5 2仔細考慮我們發現,乙個節點的顏色只有是綠色和不是綠色兩種。

如果乙個點x不是綠色,那麼根據抽屜原理,它的兩個兒子一定是乙個綠色,乙個不是綠色。

如果這個點是綠色,那麼它的兩個兒子一定都不是綠色,然後又回到了上面那一條。

歸納得證。

所以我們設f[x][0/1]為x節點不是綠色/是綠色,它的子樹的最多的綠色點的個數。

顯然f[x][1] = f[ls[x]][0] + f[rs[x]][0] + 1;

f[x][0] = max(f[ls[x][0] + f[rs[x]][1], f[rs[x][0] + f[ls[x]][1]).

最小值同理。

這題的讀入比較有意思...遞迴讀入...

#include #include 

#include

#include

using

namespace

std;

int ls[500005], rs[500005

], cnt;

void

in(int

x)int f[500005][2];//

1:綠色,0:不是綠色

int g[500005][2

];void dfs(int

x)void efs(int

x)int

main()

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題意 給定一棵二叉樹...

bzoj 1864 Zjoi2006 三色二叉樹

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