传送门

设$dp[u][i]$表示点$u$颜色为$i$时最多(最少)的绿点个数(这里用$0$表示绿点)

然后直接用树形dp就可以了

记得把情况讨论清楚

 //minamoto
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
template<class T>inline bool cmin(T&a,const T&b){return a>b?a=b,:;}
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,:;}
const int N=5e5+;
char s[N];int n,cnt,L[N],R[N],dp[N][];
void dfs(int u){
++cnt;
switch(s[u]){
case :break;
case :L[u]=cnt,dfs(cnt);break;
case :L[u]=cnt,dfs(cnt),R[u]=cnt,dfs(cnt);break;
}
}
#define ls L[u]
#define rs R[u]
void dfsmax(int u){
if(!ls) return (void)(dp[u][]=,dp[u][]=dp[u][]=);
dfsmax(ls);
if(rs) dfsmax(rs);
dp[u][]=dp[u][]=dp[u][]=;
if(rs){
cmax(dp[u][],dp[ls][]+dp[rs][]+),
cmax(dp[u][],dp[ls][]+dp[rs][]+); cmax(dp[u][],dp[ls][]+dp[rs][]),
cmax(dp[u][],dp[ls][]+dp[rs][]); cmax(dp[u][],dp[ls][]+dp[rs][]),
cmax(dp[u][],dp[ls][]+dp[rs][]);
}else{
cmax(dp[u][],dp[ls][]+),cmax(dp[u][],dp[ls][]+);
cmax(dp[u][],dp[ls][]),cmax(dp[u][],dp[ls][]);
cmax(dp[u][],dp[ls][]),cmax(dp[u][],dp[ls][]);
}
}
void dfsmin(int u){
if(!ls) return (void)(dp[u][]=,dp[u][]=dp[u][]=);
dfsmin(ls);
if(rs) dfsmin(rs);
dp[u][]=dp[u][]=dp[u][]=inf;
if(rs){
cmin(dp[u][],dp[ls][]+dp[rs][]+),
cmin(dp[u][],dp[ls][]+dp[rs][]+); cmin(dp[u][],dp[ls][]+dp[rs][]),
cmin(dp[u][],dp[ls][]+dp[rs][]); cmin(dp[u][],dp[ls][]+dp[rs][]),
cmin(dp[u][],dp[ls][]+dp[rs][]);
}else{
cmin(dp[u][],dp[ls][]+),cmin(dp[u][],dp[ls][]+);
cmin(dp[u][],dp[ls][]),cmin(dp[u][],dp[ls][]);
cmin(dp[u][],dp[ls][]),cmin(dp[u][],dp[ls][]);
}
}
int main(){
// freopen("testdata.in","r",stdin);
scanf("%s",s+),n=strlen(s+);
for(int i=;i<=n;++i) s[i]-='';
cnt=,dfs();
dfsmax(),printf("%d ",max(dp[][],max(dp[][],dp[][])));
dfsmin(),printf("%d\n",min(dp[][],min(dp[][],dp[][])));
return ;
}

洛谷P2585 [ZJOI2006]三色二叉树(树形dp)的更多相关文章

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

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

  2. 【树形DP】洛谷P2585 [ZJOI2006] 三色二叉树

    [树形DP]三色二叉树 标签(空格分隔): 树形DP [题目] 一棵二叉树可以按照如下规则表示成一个由0.1.2组成的字符序列,我们称之为"二叉树序列S": 0 该树没有子节点 1 ...

  3. 洛谷P2585 [ZJOI2006]三色二叉树

    题目描述 输入输出格式 输入格式: 输入文件名:TRO.IN 输入文件仅有一行,不超过10000个字符,表示一个二叉树序列. 输出格式: 输出文件名:TRO.OUT 输出文件也只有一行,包含两个数,依 ...

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

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

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

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

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

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

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

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

  8. 【洛谷P2585】三色二叉树

    题目大意:给定一个二叉树,可以染红绿黄三种颜色,要求父节点和子节点的颜色不同,且如果一个节点有两个子节点,那么两个子节点之间的颜色也不同.求最多和最少有多少个节点会被染成绿色. 题解:加深了对二叉树的 ...

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

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

随机推荐

  1. 2.6.2 用NPOI操作EXCEL--设置密码才可以修改单元格内容

    2.6.2 用NPOI操作EXCEL--设置密码       有时,我们可能需要某些单元格只读,如在做模板时,模板中的数据是不能随意让别人改的.在Excel中,可以通过“审阅->保护工作表”来完 ...

  2. MVC5中Model层开发数据注解 EF Code First Migrations数据库迁移 C# 常用对象的的修饰符 C# 静态构造函数 MSSQL2005数据库自动备份问题(到同一个局域网上的另一台电脑上) MVC 的HTTP请求

    MVC5中Model层开发数据注解   ASP.NET MVC5中Model层开发,使用的数据注解有三个作用: 数据映射(把Model层的类用EntityFramework映射成对应的表) 数据验证( ...

  3. 数据结构与算法之贪心算法 C++实现

    1.基本思路:从问题的某一个初始解触发逐步逼近给定的目标,以尽可能快的求得更好的解. 当达到算法中某一步不能再继续前进时.就停止算法,给出近似值.也就是说贪心算法并不从总体最优考虑,它所作出的选择仅仅 ...

  4. Ubuntuserver版安装

          近期因为工作的须要.又一次部署server.安装了Ubuntuserver版本号,依据当时遇到的一些问题,整理了下,为方便以后的使用做个记录.       因为直接安装server端.无法 ...

  5. u-boot简单学习笔记(二)——AR9331 uboot.lds分析

    最开始系统上电后 从uboot.lds开始引导 OUTPUT_FORMAT("elf32-tradbigmips", "elf32-tradbigmips", ...

  6. IOS版DesiredCapabilities参数配置

    前言 相比较Android的DesiredCapabilities参数配置,IOS的相对而言比较复杂. 特别是在真机上跑的时候,参数就更加复杂. DesiredCapabilities参数配置 模拟器 ...

  7. 【酷Q&C++】如何利用酷Q制作一个机器人?

    ——酷Q Air教程 要想阅读本篇教程,读者需要基本的C++知识以及Visual Studio 2010/2015/2017 首先,需要从官方网站下载软件 https://cqp.cc/t/23253 ...

  8. cocos2d-x交叉编译到安卓

    ccocos2d-x是一个基于MIT协议的开源框架,用于构建游戏.应用程序和其它图形界面交互应用. 它的最大特点就是跨平台性,支持IOS, Android.Windows, WindowsPhone等 ...

  9. 20170301 Excel 导出函数XXL_SIMPLE_API

    * XMPLT_V-COL_NO = . * XMPLT_V-COL_NAME = '物料号码'. * APPEND XMPLT_V. * * XMPLT_V-COL_NO = . * XMPLT_V ...

  10. sublime text2 相关插件及其应用

    一.常见的插件 1.Emmet 'ctrl+up':切换文件: "ctrl+alt+enter":创建新的div标签: "shift+ctrl+." :查找相同 ...