传送门

设$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. react 创建组件 (四)Stateless Functional Component

    上面我们提到的创建组件的方式,都是用来创建包含状态和用户交互的复杂组件,当组件本身只是用来展示,所有数据都是通过props传入的时候,我们便可以使用Stateless Functional Compo ...

  2. ansible 基本命令学习与踩坑

    1. 命令行参数 -v,–verbose 详细模式,如果命令执行成功,输出详细的结果(-vv –vvv -vvvv) -i PATH,–inventory=PATH 指定host文件的路径,默认是在/ ...

  3. 这样看ACM是不是更好?

    如果搞ACM只是为了拿奖,为了保研,这样太功利,整个过程都会变得没意思.我说过我同时看中过程和结果. 其实ACM解题也不是那么没意思,每次AC都有一种非常棒的成就感,每个题目就像是一个解谜游戏,完成了 ...

  4. v-model指令及其修饰符

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. OpenStack Live Migration

    About live migration of KVM virtual machines with NFS storage, from Mirantis blog: click this link w ...

  6. Linux MySQL主从复制(Replication)配置

    MySQL是开源的关系型数据库系统.复制(Replication)是从一台MySQL数据库服务器(主服务器master)复制数据到另一个服务器(从服务器slave)的一个进程. 配置主服务器(mast ...

  7. bzoj 1088 简单dfs

    /* 题意:给你一列仅仅能取0和1的数. 限制:每3个相邻的数的值固定,开头和结尾仅仅限制两个数 求:有多少种组合方案 解:搜索,在开头和结尾再加一个仅仅能取零的数,直接推断是否符合条件就可以 */ ...

  8. SpringMVC -- 第一个简单的程序

    学习springMVC,我们来记录下第一个HelloWord的程序 首先.我们组织须要的jar包 commons-logging-1.1.3.jar spring-aop-4.1.7.RELEASE. ...

  9. gitbash使用

    gitbash是什么 git bash是Windows下的命令行工具. 基于msys GNU环境,有git分布式版本控制工具. 主要用于git版本控制,上传下载项目代码. GNU环境,就是说如果你喜欢 ...

  10. SQL Server2005+、MySQL、Oracle 数据库字典生成工具

    之前找的数据库字典生成工具基本上都依赖于 Office Com 组件,在不安装 Office的情况下无法使用.怒,于是自己用C# 写了一个.     特征如下:         一.支持的数据库 MS ...