BZOJ1864 - [Zjoi2006]三色二叉树

BZOJ1864 - Click Here

  

Description

  

Input

  仅有一行,不超过500000个字符,表示一个二叉树序列。

  

Output

  输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色。

  

Solutions

  首先这个序列很容易证明一个序列对应一棵树,也就是说一个序列不会存在多种形态的树(左右节点交换的不算)。因此,只用DFS一下,很容易得到这棵树。

  然后就是很暴力的树形DP了。

  设$f[i][1/0]$表示第$i$个节点,是或不是绿色时的最优解。

  根据题目的要求,易得转移方程(以下为最大解的转移方程,最小解类似)

  $\begin{cases} f[i][1]=1,son(i)=0 \\ f[i][1]=f[j][0]+1,son(i)=1 \\ f[i][1]=f[L][0]+f[R][0]+1,son(i)=2 \end{cases}$

  $\begin{cases} f[i][0]=0,son(i)=0 \\ f[i][0]=max(f[j][0],f[j][1]),son(i)=1 \\ f[i][0]=max(f[L][0]+f[R][1],f[L][1]+f[R][0]),son(i)=2 \end{cases}$

  $son(i)$表示$i$节点的儿子个数。

  

CODE

CODE - Click Here

本站总访问量次 | 本站访客数人次

Powered by Hexo | Designed by iTimeTraveler | Refined by CSHwang