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 输出文件也只有一行,包含两个数,依次表示最多和最 ...
随机推荐
- Java并发之CyclicBarria的使用(二)
Java并发之CyclicBarria的使用(二) 一.简介 之前借助于其他大神写过一篇关于CyclicBarria用法的博文,但是内心总是感觉丝丝的愧疚,因为笔者喜欢原创,而不喜欢去转载一些其他的文 ...
- IO流参考
1 import java.io.File; import java.io.FileInputStream; /** * 读取一个字符 */ public class MyReadChar { pub ...
- Python面试题之Super函数
这是个高大上的函数,在python装13手册里面介绍过多使用可显得自己是高手 23333. 但其实他还是很重要的. 简单说, super函数是调用下一个父类(超类)并返回该父类实例的方法. 这里的下一 ...
- PHP-FPM 设置多pool、配置文件重写
重写配置文件 1.清空php配置文件 命令:> /usr/local/php/etc/php-fpm.conf 2.重新写入php-fpm配置 命令:vim /usr/local/php/etc ...
- 使用redis做mysql缓存
应用Redis实现数据的读写,同时利用队列处理器定时将数据写入mysql. 同时要注意避免冲突,在redis启动时去mysql读取所有表键值存入redis中,往redis写数据时,对redis主键自增 ...
- Spring_使用 NamedParameterJdbcTemplate
applicationContext.xml <?xml version="1.0" encoding="UTF-8"?><beans xml ...
- AMD C1E SUPPORT
•C1E是一种电源管理状态,它可以让处理器节能不限于处理器内核.在CIE状态,可以通过降低内存时钟速度.关闭HT技术,来降低处理器能耗.这种新功能对于12核的处理器极其重要,因为这种处理器在设计上既增 ...
- 关于C/C++中main函数参数的学习
因为面对对象作业(2018.5.21)的要求,去学习了C/C++中main函数参数的意义,以及一些简单的使用(从命令行指令的接受),不给予赘述.(仅为个人拙见,还望看官指正) 首先,带有参数的main ...
- Memcached 连接
我们可以通过 telnet 命令并指定主机ip和端口来连接 Memcached 服务. 语法 telnet HOST PORT 命令中的 HOST 和 PORT 为运行 Memcached 服务的 I ...
- Reflection01_获取Class对象
1.java 代码: package reflectionZ; public class TreflectionZ { public static void main(String[] args) t ...