bzoj 1864 三色二叉树
Written with StackEdit.
Description

Input
仅有一行,不超过\(5*10^5\)个字符,表示一个二叉树序列。
Output
输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色。
Sample Input
1122002010
Sample Output
5 2
Solution
- 一道比较水的树形\(dp\).
- 读入考察递归的使用.然后就是一个\(ex-\)没有上司的舞会.
- 令\(f[i][0/1/2]\)表示当\(i\)的颜色分别为绿,红,蓝时,根节点为\(i\)的子树的最大绿点数.
- \(g[i][0/1/2]\)表示当\(i\)的颜色分别为绿,红,蓝时,根节点为\(i\)的子树的最小绿点数,
- 然后就是弱智一般的转移了.
#include<bits/stdc++.h>
using namespace std;
typedef long long LoveLive;
inline int read()
{
int out=0,fh=1;
char jp=getchar();
while ((jp>'9'||jp<'0')&&jp!='-')
jp=getchar();
if (jp=='-')
{
fh=-1;
jp=getchar();
}
while (jp>='0'&&jp<='9')
{
out=out*10+jp-'0';
jp=getchar();
}
return out*fh;
}
const int MAXN=5e5+10;
int idx=1;
int ls[MAXN],rs[MAXN],sons[MAXN];
void readtree(int x)
{
char ch=getchar();
if(ch=='1')
{
ls[x]=++idx;
readtree(idx);
sons[x]=1;
}
if(ch=='2')
{
ls[x]=++idx;
readtree(idx);
rs[x]=++idx;
readtree(idx);
sons[x]=2;
}
}
int f[MAXN][3];//max
int g[MAXN][3];//min
//0 green
//1 red
//2 blue
void dfs(int u)
{
if(sons[u]==0)
{
f[u][0]=1;
// f[u][1]=0;
// f[u][2]=0;
g[u][0]=1;
// g[u][1]=0;
// g[u][2]=0;
}
#define l ls[u]
#define r rs[u]
else if(sons[u]==1)
{
dfs(l);
f[u][0]=max(f[l][1],f[l][2])+1;
f[u][1]=max(f[l][0],f[l][2]);
f[u][2]=max(f[l][0],f[l][1]);
g[u][0]=min(g[l][1],g[l][2])+1;
g[u][1]=min(g[l][0],g[l][2]);
g[u][2]=min(g[l][0],g[l][1]);
}
else if(sons[u]==2)
{
dfs(l);
dfs(r);
f[u][0]=max(f[l][1]+f[r][2],f[l][2]+f[r][1])+1;
f[u][1]=max(f[l][0]+f[r][2],f[l][2]+f[r][0]);
f[u][2]=max(f[l][0]+f[r][1],f[l][1]+f[r][0]);
g[u][0]=min(g[l][1]+g[r][2],g[l][2]+g[r][1])+1;
g[u][1]=min(g[l][0]+g[r][2],g[l][2]+g[r][0]);
g[u][2]=min(g[l][0]+g[r][1],g[l][1]+g[r][0]);
}
}
int main()
{
readtree(1);
dfs(1);
int maxans=max(f[1][0],max(f[1][1],f[1][2]));
int minans=min(g[1][0],min(f[1][1],g[1][2]));
printf("%d %d\n",maxans,minans);
return 0;
}
bzoj 1864 三色二叉树的更多相关文章
- BZOJ 1864 三色二叉树 - 树型dp
传送门 题目大意: 给一颗二叉树染色红绿蓝,父亲和儿子颜色必须不同,两个儿子颜色必须不同,问最多和最少能染多少个绿色的. 题目分析: 裸的树型dp:\(dp[u][col][type]\)表示u节点染 ...
- BZOJ 1864: [Zjoi2006]三色二叉树( 树形dp )
难得的ZJOI水题...DFS一遍就行了... ----------------------------------------------------------------------- #inc ...
- 【BZOJ】1864: [Zjoi2006]三色二叉树
1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 1295 Solved: 961[Submit][Status ...
- BZOJ 1864:[Zjoi2006]三色二叉树(树DP)
三色二叉树 问题描述 输入 仅有一行,不超过500000个字符,表示一个二叉树序列. 输出 输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色. 样例输入 1122002010 ...
- bzoj千题计划212:bzoj1864: [Zjoi2006]三色二叉树
http://www.lydsy.com/JudgeOnline/problem.php?id=1864 #include<cstdio> #include<cstring> ...
- 1864: [Zjoi2006]三色二叉树
1864: [Zjoi2006]三色二叉树 链接 分析: 做得最智障的一题了... 首先中间输出两个数之间没空格(换行居然也过了...), 写了dp[i][0/1/2],后来知道其实dp[i][0/1 ...
- BZOJ1864[ZJOI2006]三色二叉树[树形DP]
1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 773 Solved: 548[Submit][Status] ...
- 【BZOJ-1864】三色二叉树 树形DP
1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 659 Solved: 469[Submit][Status] ...
- 【BZOJ1864】[Zjoi2006]三色二叉树 树形DP
1864: [Zjoi2006]三色二叉树 Description Input 仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次表示最多和最 ...
随机推荐
- Leaflet API 翻译(一)
摘自:http://jsrookie.iteye.com/blog/2318972 L.Map API各种类中的核心部分,用来在页面中创建地图并操纵地图. Constructor(构造器) 通过div ...
- c语言单元测试框架--CuTest
1.简介 CuTest是一款微小的C语言单元测试框,是我迄今为止见到的最简洁的测试框架之一,只有2个文件,CuTest.c和CuTest.h,全部代码加起来不到一千行.麻雀虽小,五脏俱全,测试的构建. ...
- 通过自动回复机器人学Mybatis:原始版本(包括JDBC、pom.xml等)
imooc视频学习笔记 ----> URL:http://www.imooc.com/learn/154 list.jsp <%@ page contentType="text/ ...
- 单元测试框架unittest,ddt
unittest case.py 测试用例 suite.py 测试套件 loader.py 加载测试用例 run.py 执行测试用例 result.py 测试结果,测试报告 main mock 模拟测 ...
- Java套接字socket编程笔记
相对于C和C++来说,Java中的socket编程是比较简单的,比较多的细节都已经被封装好了,每次创建socket连接只需要知道地址和端口即可. 在了解socket编程之前,我们先来了解一下读写数据的 ...
- UNIDAC的安装
UNIDAC的安装1.在source目录中找到对应Delphi版本目录的make.bat文件,修改其中的 set IdeDir="D:\Application\DelphiXE2指到你的de ...
- git原理学习
http://git.oschina.net/progit/ 这一点值得牢记:Git 会把工作目录的内容恢复为检出某分支时它所指向的那个提交对象的快照.它会自动添加.删除和修改文件以确保目录的内容 ...
- IE6+以上清除浮动普遍方法总结
浮动,CSSfloat属性.学过的人应该知道这个属性,平时用的应该也是很多的.特别是在N栏布局中. 但是我们会经常遇到这样一种情况,前面的元素浮动之后会影响后面的元素,后面的元素需要用清除浮动来消灭前 ...
- MFC中如何在一个类中调用另一个类的控件
学习记录: 两个类,一个为主类 1个为:CCkDlg,主类 1个为: Https,用来做HTTPS请求获得页面状态. 测试界面如下: CCkDlg 类里定义函数 void CCkDlg::printf ...
- scala学习手记31 - Trait
不知道大家对java的接口是如何理解的.在我刚接触到接口这个概念的时候,我将接口理解为一系列规则的集合,认为接口是对类的行为的规范.现在想来,将接口理解为是对类的规范多少有些偏颇,更恰当些的观点应该是 ...