[ZJOI2006]三色二叉树
[ZJOI2006]三色二叉树
#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]三色二叉树的更多相关文章
- BZOJ1864[ZJOI2006]三色二叉树[树形DP]
1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 773 Solved: 548[Submit][Status] ...
- 【BZOJ1864】[Zjoi2006]三色二叉树 树形DP
1864: [Zjoi2006]三色二叉树 Description Input 仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次表示最多和最 ...
- BZOJ 1864: [Zjoi2006]三色二叉树( 树形dp )
难得的ZJOI水题...DFS一遍就行了... ----------------------------------------------------------------------- #inc ...
- BZOJ_1864_[Zjoi2006]三色二叉树_树形DP
BZOJ_1864_[Zjoi2006]三色二叉树_树形DP 题意: 分析:递归建树,然后DP,从子节点转移. 注意到红色和蓝色没有区别,因为我们可以将红蓝互换而方案是相同的.这样的话我们只需要知道当 ...
- bzoj千题计划212:bzoj1864: [Zjoi2006]三色二叉树
http://www.lydsy.com/JudgeOnline/problem.php?id=1864 #include<cstdio> #include<cstring> ...
- 【BZOJ】1864: [Zjoi2006]三色二叉树
1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 1295 Solved: 961[Submit][Status ...
- 1864: [Zjoi2006]三色二叉树
1864: [Zjoi2006]三色二叉树 链接 分析: 做得最智障的一题了... 首先中间输出两个数之间没空格(换行居然也过了...), 写了dp[i][0/1/2],后来知道其实dp[i][0/1 ...
- luogu P2585 [ZJOI2006]三色二叉树
P2585 [ZJOI2006]三色二叉树 题目描述 输入输出格式 输入格式: 输入文件名:TRO.IN 输入文件仅有一行,不超过10000个字符,表示一个二叉树序列. 输出格式: 输出文件名:TRO ...
- 嘴巴题5 「BZOJ1864」[ZJOI2006] 三色二叉树
1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1195 Solved: 882 [Submit][Status ...
随机推荐
- 数据库中存在0,1,2.....或者1,null,2 排序时让0或者null在最后的sql语句
select * from yryz_products_t order by isnull(sort),sort; select * from yourtable order by cast ...
- Solidworks 好的测试题模拟题
题目:按照下图构建草图,注意设置必要的几何约束. 问题: 1.参照下图所示参数时请问其中绿色区域的面积为多少平方毫米? 题目:参照下图绘制草图轮廓,注意图中各线条之间均为相切过渡. 问题: ...
- SQL语句练习手册--第三篇
一.CASE的两种用法 1.1 等值判断->相当于switch case (1)具体用法模板: CASE expression WHEN value1 THEN returnvalue1 WHE ...
- vue相关知识点
1.el-date-picker输入的时间范围需要两点 A.禁用键盘输入 :editable=false,否则虽然禁用,但是输入框还能输入 B.指定时间范围::picker-options=" ...
- python第一个web程序
例一: import web urls= ('/(.*)','index') app= web.application(urls,globals()) class index: def GET(sel ...
- Android--点击EditText的时候弹出软键盘,点击EditText之外空白处软键盘消失
在android中点击EditText的时候会弹出软键盘,但当我们输入完毕或者想隐藏软键盘时,我们可以点击软键盘上的隐藏按钮,这种方法固然可行,但是为了提高用户体验,我们常常要实现这种功能:当输入完毕 ...
- Android使用ImageView显示网络图片
本案例使用ImageView 简单的实现了网络图片的调用.当中注意事项.由于用到了网络,这里採用了HttpClient方法訪问网络联接,关于怎样使用,可參照文章 Android中使用HttpClien ...
- explicit 构造函数
一.构造函数.默认构造函数.合成的默认构造函数 构造函数,是函数名与类名同样.没有返回类型的特殊的成员函数.能够有初始化列表. 默认构造函数,没有形參.或全部形參都有默认实參的构造函数. 假设没有显示 ...
- linux sublime python
(三)配置python3编译环境 1.点击上部菜单栏Tools->Build System ->new Build System 2.点击之后,会出现一个空的配置文件,此时,往这个空配置文 ...
- MIC中示例程序计算π
mic中编程十分简单,只需在普通程序中简单加几句就可以,使用 lspci|grep -i -co-processor 命令可以查看机器中是否插入MIC卡以及MIC卡的数目,MIC编程环境的配置这里就不 ...