难得的ZJOI水题...DFS一遍就行了...

-----------------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cctype>
 
using namespace std;
 
const int maxn = 500009;
 
int N = 0, Mx[maxn][3], Mn[maxn][3], L[maxn], R[maxn];
 
void dfs(int x) {
char c = getchar();
if(c != '0') {
dfs(L[x] = N++);
if(c == '2') dfs(R[x] = N++);
}
}
 
void DFS(int x) {
if(~L[x]) DFS(L[x]);
if(~R[x]) DFS(R[x]);
if(~L[x] && ~R[x]) {
Mx[x][0] = max(Mx[L[x]][1] + Mx[R[x]][2], Mx[L[x]][2] + Mx[R[x]][1]) + 1;
Mx[x][1] = max(Mx[L[x]][0] + Mx[R[x]][2], Mx[L[x]][2] + Mx[R[x]][0]);
Mx[x][2] = max(Mx[L[x]][0] + Mx[R[x]][1], Mx[L[x]][1] + Mx[R[x]][0]);
Mn[x][0] = min(Mn[L[x]][1] + Mn[R[x]][2], Mn[L[x]][2] + Mn[R[x]][1]) + 1;
Mn[x][1] = min(Mn[L[x]][0] + Mn[R[x]][2], Mn[L[x]][2] + Mn[R[x]][0]);
Mn[x][2] = min(Mn[L[x]][0] + Mn[R[x]][1], Mn[L[x]][1] + Mn[R[x]][0]);
} else if(~L[x]) {
Mx[x][0] = max(Mx[L[x]][1], Mx[L[x]][2]) + 1;
Mx[x][1] = max(Mx[L[x]][0], Mx[L[x]][2]);
Mx[x][2] = max(Mx[L[x]][1], Mx[L[x]][0]);
Mn[x][0] = min(Mn[L[x]][1], Mn[L[x]][2]) + 1;
Mn[x][1] = min(Mn[L[x]][0], Mn[L[x]][2]);
Mn[x][2] = min(Mn[L[x]][1], Mn[L[x]][0]);
} else if(~R[x]) {
Mx[x][0] = max(Mx[R[x]][1], Mx[R[x]][2]) + 1;
Mx[x][1] = max(Mx[R[x]][0], Mx[R[x]][2]);
Mx[x][2] = max(Mx[R[x]][1], Mx[R[x]][0]);
Mn[x][0] = min(Mn[R[x]][1], Mn[R[x]][2]) + 1;
Mn[x][1] = min(Mn[R[x]][0], Mn[R[x]][2]);
Mn[x][2] = min(Mn[R[x]][1], Mn[R[x]][0]);
} else {
Mx[x][1] = Mx[x][2] = 0; Mx[x][0] = 1;
Mn[x][1] = Mn[x][2] = 0; Mn[x][0] = 1;
}
}
 
int main() {
memset(L, -1, sizeof L);
memset(R, -1, sizeof R);
dfs(N++); DFS(0);
printf("%d %d\n", *max_element(Mx[0], Mx[0] + 3), *min_element(Mn[0], Mn[0] + 3));
return 0;
}

-----------------------------------------------------------------------

1864: [Zjoi2006]三色二叉树

Time Limit: 1 Sec  Memory Limit: 64 MB
Submit: 590  Solved: 412
[Submit][Status][Discuss]

Description

Input

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

Output

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

Sample Input

1122002010

Sample Output

5 2

HINT

Source

BZOJ 1864: [Zjoi2006]三色二叉树( 树形dp )的更多相关文章

  1. BZOJ 1864: [Zjoi2006]三色二叉树 树形DP + 读入

    Description Input 仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色. 题解:本题大水 ...

  2. 【BZOJ1864】[Zjoi2006]三色二叉树 树形DP

    1864: [Zjoi2006]三色二叉树 Description Input 仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次表示最多和最 ...

  3. BZOJ1864[ZJOI2006]三色二叉树[树形DP]

    1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 773  Solved: 548[Submit][Status] ...

  4. [luogu2585 ZJOI2006] 三色二叉树 (树形dp)

    传送门 Description Input 输入文件名:TRO.IN 输入文件仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件名:TRO.OUT 输出文件也只有一行,包 ...

  5. 洛谷 2585 [ZJOI2006]三色二叉树——树形dp

    题目:https://www.luogu.org/problemnew/show/P2585 可以把不是绿色的记成一种.仔细一想不会有冲突.如果自己是绿色,孩子的不同颜色不会冲突:如果自己不是绿色,自 ...

  6. 【BZOJ】1864: [Zjoi2006]三色二叉树

    1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 1295  Solved: 961[Submit][Status ...

  7. 【BZOJ-1864】三色二叉树 树形DP

    1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 659  Solved: 469[Submit][Status] ...

  8. 1864: [Zjoi2006]三色二叉树

    1864: [Zjoi2006]三色二叉树 链接 分析: 做得最智障的一题了... 首先中间输出两个数之间没空格(换行居然也过了...), 写了dp[i][0/1/2],后来知道其实dp[i][0/1 ...

  9. 三色二叉树——树形dp

    三色二叉树 题目描述 一棵二叉树可以按照如下规则表示成一个由 \(0.1.2\) 组成的字符序列,我们称之为"二叉树序列 \(S\) ": \(0\) 该树没有子节点. \(1S_ ...

随机推荐

  1. Less基础教程

    Less基础教程 less是较早出现的css预处理器. LESS API 参考 安装和使用 安装比较简单,通过nmp或bower安装即可. npm install less -g bower inst ...

  2. 160G 视频教程(Java+Android+项目视频)免费下载

    我不喜欢多说没用,直接给下载链接,进去直接下载,下载不动的联系网站客服解决!我只和我的好朋友们分享好的视频教程 http://edu.csdn.net/main/video.shtml 视频教程目录过 ...

  3. css学习笔记四

    广州天气变冷了,css学习笔记还是要总结. 总结: 1:几米页面静态页面主要是一列结构头部banner图,mainbody部分放文字内容和图书图片,底部是页面的版权信息 2:腾讯软件中心静态页面制作( ...

  4. [poj 3159]Candies[差分约束详解][朴素的考虑法]

    题意 编号为 1..N 的人, 每人有一个数; 需要满足 dj - di <= c 求1号的数与N号的数的最大差值.(略坑: 1 一定要比 N 大的...difference...不是" ...

  5. 取文件的大小 (KB,MB,GB...)

    取文件的大小 (KB,MB,GB...) 2种方式: VB 和 C# 1,  VB Public Function GetFileSize(ByVal iFileSizeKB As Long) As ...

  6. STL-multimap

    转自:http://www.cnblogs.com/xiaoka/archive/2011/08/09/2132342.html multimap提供了可以一种可以有重复键值的STL map类型.其插 ...

  7. U3d 手游优化概述

    移动平台瓶颈 体积小 芯片要求改 功耗小 影响计算系能 带宽小 传输方面受限 性能优化 资源方面 美术方面 自带地形(地形是非常占用资源的) a.控制地形的分辨率 b.地形高度图尺寸小于257 c.地 ...

  8. BZOJ 1606: [Usaco2008 Dec]Hay For Sale 购买干草( dp )

    -------------------------------------------------------------------- #include<cstdio> #include ...

  9. OA项目总结

    一.自定义拦截器:     继承AbstractInterceptor,覆写intercept方法,实现功能逻辑,最后在Struts.xml文件中配置了自定义拦截器,首先自定义拦截器栈, <!- ...

  10. linux怎样修改用户权限

    ls -l  查看目录下的文件详细信息 ll 同上 whoami 功能说明:先似乎用户名称. 语 法:whoami [--help][--version] 补充说明:显示自身的用户名称,本指令相当于执 ...