三色二叉樹
time limit:1s
memory limit:32m
accepted submit:81
total submit:211
一棵二叉樹可以按照如下規則表示成乙個由0、1、2組成的字串行,我們稱之為「二叉樹序列s」:
例如,下圖所表示的二叉樹可以用二叉樹序列s=21200110來表示。
你的任務是要對一棵二叉樹的節點進行染色。每個節點可以被染成紅色、綠色或藍色。並且,乙個節點與其子節點的顏色必須不同,如果該節點有兩個子節點,那麼這兩個子節點的顏色也必須不相同。給定一棵二叉樹的二叉樹序列,請求出這棵樹中最多和最少有多少個點能夠被染成綠色。
輸入輸出格式
輸入資料由多組資料組成。
每組資料僅有一行,不超過10000個字元,表示乙個二叉樹序列。
對於每組輸入資料,輸出僅一行包含兩個整數,依次表示最多和最少有多少個點能夠被染成綠色。
樣例輸入
1122002010樣例輸出
5 2
#include #include #include #include #define top_num 2
#define min_top 0
#define max_top 1
#define is_green 0
#define no_green 1
#define max_num(x, y) ((x) > (y) ? (x) : (y))
#define min_num(x, y) ((x) < (y) ? (x) : (y))
int main()
}--top[min_top];
isa = stack[min_top][is_green][top[min_top]];
noa = stack[min_top][no_green][top[min_top]];
min_num = min_num(isa, noa);
--top[max_top];
isa = stack[max_top][is_green][top[max_top]];
noa = stack[max_top][no_green][top[max_top]];
max_num = max_num(isa, noa);
printf("%d %d\n", max_num, min_num);
}return 0;
}
ZJOI 2006 三色二叉樹
顯然是樹形dp,可以在狀態轉移的過程中順便把樹給建出來,定義 f i j f i j 為當節點 i i 被染成顏色 j role presentation style position relative j j時,以 i i 為根的子樹中最多有多少個節點被染成綠色,g i j role presen...
bzoj1864 三色二叉樹
僅有一行,不超過500000個字元,表示乙個二叉樹序列。輸出檔案也只有一行,包含兩個數,依次表示最多和最少有多少個點能夠被染成綠色。1122002010 5 2樹形dp int mx n 3 3 點i的顏色為0 1 2,點i為根的子樹最多有多少個0 1 2 int mn n 3 3 點i的顏色為0 ...
BZOJ 1864 三色二叉樹 樹DP
僅有一行,不超過500000個字元,表示乙個二叉樹序列。輸出檔案也只有一行,包含兩個數,依次表示最多和最少有多少個點能夠被染成綠色。1122002010 5 2dp i 0 i節點不為綠色獲得的最大收益 dp i 1 i節點為綠色獲得的最大收益 include include include inc...