传送门

设$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. PAT 1094. The Largest Generation(BFS)

    CODE: #include<cstdio> #include<cstring> #include<queue> using namespace std; bool ...

  2. ActiveMQ(五) 转

    package pfs.y2017.m11.mq.activemq.demo05; import javax.jms.Connection; import javax.jms.ConnectionFa ...

  3. python-一个小练习

    myseq = '''[a:1,b:2,c:3] [a:3,b:3,c:8] [a:7,c:2:m:7,r:4] [a:2,c:4:m:6,r:4] [a:3,b:2,c:7,o:5]''' def ...

  4. 查看windows下port占用

    有时假tomcat启动时提示port被占用.能够用netstat -aon|findstr "8080" 命令查找到,然后 用 taskkill /f /pid pid号 强制ki ...

  5. Ajax_HTTP请求以及响应

    什么是HTTP请求? 就是从用户的浏览器端向服务器端发送请求 一个HTTP请求一般由四个部分组成 1.HTTP请求的方法或者动作,比如GET或者POST请求 2.请求的URL,也就是请求的地址 3.请 ...

  6. php输出echo、print、print_r、printf、sprintf、var_dump比较

    php输出echo.print.print_r.printf.sprintf.var_dump比较 一.echo    echo() 实际上不是一个函数,是php语句,因此您无需对其使用括号.不过,如 ...

  7. vc++6.0中右键点击"转到定义"为什么是"未定义符号"呢?

    VC的问题,需要生成一下浏览信息...然后rebuild

  8. 基于node+koa2+mongodb实现简单的导航管理系统

    基于node+koa2+mongodb实现简单的导航管理系统 项目说明 本项目gitbub地址 https://github.com/xuess/nav-admin,喜欢请star 基于node 实现 ...

  9. MapReduce算法形式二:去重(HashSet)

    案例二:去重(shuffle/HashSet等方法)shuffle主要针对的是key去重HashSet主要针对values去重

  10. Shell hook

    [目的]实现 ll -as   +hook+     clear Shell脚本及钩子 - CSDN博客 https://blog.csdn.net/shengzhu1/article/details ...