题目:https://www.luogu.org/problemnew/show/P2585

可以把不是绿色的记成一种。仔细一想不会有冲突。如果自己是绿色,孩子的不同颜色不会冲突;如果自己不是绿色,自己的不是绿色的孩子对于自己就像二分图一样的感觉,所以总有方案使得不区分另外两种颜色也不会有冲突。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=5e5+;
int n,rt,tot,ls[N],rs[N],dp[N][][],p0;//是/否绿 最大/小
char ch[N];
void build(int &cr,int dep)
{
cr=++tot;
if(ch[p0]=='')p0++;
else if(ch[p0]=='')p0++,build(ls[cr],dep+);
else
p0++,build(ls[cr],dep+),build(rs[cr],dep+);
}
void dfs(int cr)
{
if(!ls[cr])
{
dp[cr][][]=dp[cr][][]=;
dp[cr][][]=dp[cr][][]=;
return;
}
else if(!rs[cr])
{
int v=ls[cr]; dfs(v);
dp[cr][][]=dp[v][][]+;
dp[cr][][]=dp[v][][]+;
dp[cr][][]=max(dp[v][][],dp[v][][]);
dp[cr][][]=min(dp[v][][],dp[v][][]);
}
else
{
int Ls=ls[cr],Rs=rs[cr];
dfs(Ls); dfs(Rs);
dp[cr][][]=dp[Ls][][]+dp[Rs][][]+;
dp[cr][][]=dp[Ls][][]+dp[Rs][][]+;
dp[cr][][]=max(dp[Ls][][]+dp[Rs][][],
dp[Ls][][]+dp[Rs][][]);
dp[cr][][]=min(dp[Ls][][]+dp[Rs][][],
dp[Ls][][]+dp[Rs][][]);
}
}
int main()
{
//freopen("TRO.IN","r",stdin);
//freopen("TRO.OUT","w",stdout);
scanf("%s",ch);n=strlen(ch);
build(rt,);
dfs(rt);
printf("%d %d\n",max(dp[rt][][],dp[rt][][]),
min(dp[rt][][],dp[rt][][]));
return ;
}

洛谷 2585 [ZJOI2006]三色二叉树——树形dp的更多相关文章

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

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

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

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

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

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

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

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

  5. 洛谷P2585 [ZJOI2006]三色二叉树(树形dp)

    传送门 设$dp[u][i]$表示点$u$颜色为$i$时最多(最少)的绿点个数(这里用$0$表示绿点) 然后直接用树形dp就可以了 记得把情况讨论清楚 //minamoto #include<b ...

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

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

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

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

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

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

  9. 【BZOJ-1864】三色二叉树 树形DP

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

随机推荐

  1. 一套ui满足ios与android界面

    1.android 画布宽高720*1280的标准来切图生成xhdpi标准图,后自动生成mdpi.hdpi.xhdpi.xxhdpi四套图. 2.ios画布宽高640 x 1136的标准来切图生成xh ...

  2. Notepad++集成Subversion SVN插件

    点击Plugin –> Plugin Manager –> Show Plugin Manager 打开后,在“Available”页找到“Subversion”,然后点击“Install ...

  3. x86 的 TSS 任务切换机制

    转自:http://blog.chinaunix.net/uid-587665-id-2732907.html [0]写在前面 segment descriptors 构建保护模式下的最基本.最根本的 ...

  4. 目标跟踪之粒子滤波---Opencv实现粒子滤波算法

    目标跟踪学习笔记_2(particle filter初探1) 目标跟踪学习笔记_3(particle filter初探2) 前面2篇博客已经提到当粒子数增加时会内存报错,后面又仔细查了下程序,是代码方 ...

  5. 继承ViewGroup类

    Android中,布局都是直接或间接的继承自ViewGroup类,其中,ViewGroup的直接子类目前有: AbsoluteLayout, AdapterView<T extends Adap ...

  6. TP框架部分--文件目录及作用

    下载thinkphp3.2.3版本,解压缩后将文件夹名字改为thinkphp,然后放在www目录下,里面的文件夹和文件的名字和作用如下:(前面有Tab健的表示下一级,thinkphp是根目录)//th ...

  7. PageHelper

    https://pagehelper.github.io/ Mybatis分页插件PageHelper简单使用 SpringBoot之分页PageHelper

  8. ch.poweredge.ntlmv2-auth

    <dependency> <groupId>ch.poweredge.ntlmv2-auth</groupId> <artifactId>ntlmv2- ...

  9. php总结2——php中的变量、数据类型及转换、运算符、流程控制中的分支结构

    2.1  php中的变量: 定义变量:$变量名称=值: 变量名称:$开头    $之后的第一位必须是字母    $第二位之后可以是字母.数字或者是下划线.习惯上变量名称有实际含义,第二个单词后首字母大 ...

  10. Objective-c中的delegate浅析

    delegate初探 在ios开发中,我们常常会用到类似例如以下的对话框: 因此,例如以下这段代码我们也就非常熟悉了: - (IBAction)showSheet:(id)sender { UIAct ...