僅有一行,不超過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 ...