难得的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. JavaScript 的 Promise

    先看这个 http://www.html5rocks.com/zh/tutorials/es6/promises/#toc-api  [JavaScript Promise 浏览器支持的Promise ...

  2. 普通内存、ECC内存和REG ECC内存有什么不同

    都知道,在INTEL平台,北桥负责与CPU的联系,并控制内存.AGP.PCI数据在北桥内部传输.基本上只要主板芯片组确定,那么其支持的内存类型也就确定了. INTEL芯片组划分的很清楚,865PE属于 ...

  3. 自己模拟实现math.h中的函数

    之前一直都很迷惑pow()函数时怎么实现的,对于整数次的幂我还能很容易做到,但是对于分数次幂就不是那么好做了.需要一些高等数学级数的知识. 我这里实现了求ln(x), pow(double x, do ...

  4. python总结

    环境:django,numpy,matplotlib, 解释语言:开发效率高,通用性强,内置方便的数据容器,易于扩展和嵌入. 语言:lua--嵌入式/网络/APP,erlang--嵌入式,python ...

  5. contextServlet

    一:读取配置文件中的参数信息 1.新建servlet文件ContextServlet1,代码为: import java.io.IOException; import java.util.Enumer ...

  6. 全面理解js面向对象

    前言 当今 JavaScript 大行其道,各种应用对其依赖日深.web 程序员已逐渐习惯使用各种优秀的 JavaScript 框架快速开发 Web 应用,从而忽略了对原生 JavaScript 的学 ...

  7. window.showModalDialog刷新父窗口和本窗口的方法及注意

    window.showModalDialog刷新父窗口和本窗口的方法及注意:   一.刷新父窗口的方法:    A.使用window.returnValue给父窗口传值,然后根据值判断是否刷新. 在w ...

  8. iOS NSMutableURLRequest 上传图片

    - (void)postImage:(UIImage *)_image { //分界线的标识符 NSString *TWITTERFON_FORM_BOUNDARY = @"AaB03x&q ...

  9. iOS 7 标签栏控制器进行模态视图跳转后变成透明

    要解决此问题,需要设置tabBar的如下属性: self.tabBar.translucent = NO;

  10. jsp 有哪些动作?作用分别是什么?

    答:JSP 共有以下 6 种基本动作jsp:include: 在页面被请求的时候引入一个文件.jsp:useBean: 寻找或者实例化一个 JavaBean.jsp:setProperty: 设置 J ...