[ZJOI2006]三色二叉树

BZOJ

luogu

分3种颜色讨论转移一下

#include<bits/stdc++.h>
using namespace std;
const int _=500005;
int n,now;
int ls[_],rs[_],r[_],g[_],b[_];
char s[_];
void bu(int u){
if(s[u]=='1'||s[u]=='2'){++now;bu(ls[u]=now);}
if(s[u]=='2'){++now;bu(rs[u]=now);}
}
void qmax(int u){
if(s[u]=='0'){g[u]=1;r[u]=0;b[u]=0;return;}
if(s[u]=='1'){
int v=ls[u];qmax(v);
g[u]=max(b[v],r[v])+1;
r[u]=max(g[v],b[v]);
b[u]=max(g[v],r[v]);
}
if(s[u]=='2'){
qmax(ls[u]);qmax(rs[u]);
g[u]=max(b[ls[u]]+r[rs[u]],r[ls[u]]+b[rs[u]])+1;
b[u]=max(g[ls[u]]+r[rs[u]],r[ls[u]]+g[rs[u]]);
r[u]=max(b[ls[u]]+g[rs[u]],g[ls[u]]+b[rs[u]]);
}
}
void qmin(int u){
if(s[u]=='0'){g[u]=1;r[u]=0;b[u]=0;return;}
if(s[u]=='1'){
int v=ls[u];qmin(v);
g[u]=min(b[v],r[v])+1;
r[u]=min(g[v],b[v]);
b[u]=min(g[v],r[v]);
}
if(s[u]=='2'){
qmin(ls[u]);qmin(rs[u]);
g[u]=min(b[ls[u]]+r[rs[u]],r[ls[u]]+b[rs[u]])+1;
b[u]=min(g[ls[u]]+r[rs[u]],r[ls[u]]+g[rs[u]]);
r[u]=min(b[ls[u]]+g[rs[u]],g[ls[u]]+b[rs[u]]);
}
}
int main(){
scanf("%s",s+1);n=strlen(s+1);
bu(now=1);
qmax(1);
printf("%d ",max(g[1],max(r[1],b[1])));
memset(g,63,sizeof(g));
memset(r,63,sizeof(r));
memset(b,63,sizeof(b));
qmin(1);
printf("%d\n",min(g[1],min(b[1],r[1])));
return 0;
}

[ZJOI2006]三色二叉树的更多相关文章

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

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

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

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

  3. BZOJ 1864: [Zjoi2006]三色二叉树( 树形dp )

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

  4. BZOJ_1864_[Zjoi2006]三色二叉树_树形DP

    BZOJ_1864_[Zjoi2006]三色二叉树_树形DP 题意: 分析:递归建树,然后DP,从子节点转移. 注意到红色和蓝色没有区别,因为我们可以将红蓝互换而方案是相同的.这样的话我们只需要知道当 ...

  5. bzoj千题计划212:bzoj1864: [Zjoi2006]三色二叉树

    http://www.lydsy.com/JudgeOnline/problem.php?id=1864 #include<cstdio> #include<cstring> ...

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

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

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

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

  8. luogu P2585 [ZJOI2006]三色二叉树

    P2585 [ZJOI2006]三色二叉树 题目描述 输入输出格式 输入格式: 输入文件名:TRO.IN 输入文件仅有一行,不超过10000个字符,表示一个二叉树序列. 输出格式: 输出文件名:TRO ...

  9. 嘴巴题5 「BZOJ1864」[ZJOI2006] 三色二叉树

    1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1195 Solved: 882 [Submit][Status ...

随机推荐

  1. 2017.6.27 跟开涛学spring3--spring概述

    参考来自:http://www.importnew.com/17474.html 注意,项目中使用的是spring4,这里学习的是spring3.关于spring4的变化:http://ningand ...

  2. 2017.7.7 在eclipse中快速查找类:ctrl+shift+T

    快捷键:ctrl+shift+T,用于快速找到某个类.

  3. Web 目录枚举与遍历漏洞解决

    "目录枚举漏洞"解决方法 一.名词解释 网站目录枚举漏洞:指黑客利用非法攻击手段扫描符合"8.3"命名原则的目录与文件. 二.验证工具:scanner-comp ...

  4. Linux Ubuntu下Dropbox图标消失

    Linux下的Dropbox是支持命令行模式的.,在terminal中输入dropbox后,如下提示: Dropbox command-line interface commands: Note: u ...

  5. Angular 学习笔记——模块之间的通讯

    <!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv="C ...

  6. NinePatch

    将图片保存为扩展名为.9.png的格式直接放入Android Studio中的drawable文件夹,拖拉选择拉伸区域,如下图,即可制作出可拉伸背景

  7. python——super()

    一.问题的发现与提出 在Python类的方法(method)中,要调用父类的某个方法,在Python 2.2以前,通常的写法如代码段1: class A: def __init__(self): pr ...

  8. react-native 详解

    1.获取主屏幕尺寸 // 导入类库 var Dimensions = require('Dimensions'); // 样式 const styles = StyleSheet.create({ c ...

  9. JavaScript字符编解码

    示例代码: <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF ...

  10. 每天一个JavaScript实例-展示设置和获取CSS样式设置

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...