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 输出文件也只有一行,包含两个数,依次表示最多和最 ...
随机推荐
- mysql 系列文章推荐
1. mysql日志详细解析 http://www.cnblogs.com/wangkongming/p/3684950.html 2. mysql 主从同步实验 http://pmg ...
- 【leetcode刷题笔记】Find Minimum in Rotated Sorted Array
Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...
- input-file 部分手机不能拍照问题
曾经遇到一个需求,用户拍身份证上传验证, 然后我卡在了拍照这个点上. 最初采用的是微信的 api,wx.chooseImage, 但随后发现,返回的是一种只有微信才能预览的 url 格式, 但验证是要 ...
- python中多重继承与获取对象
1.python中多重继承 除了从一个父类继承外,Python允许从多个父类继承,称为多重继承. 多重继承的继承链就不是一棵树了,它像这样: class A(object): def __init__ ...
- Boot-Repair&usb_repair
https://help.ubuntu.com/community/Boot-Repair https://askubuntu.com/questions/500647/unable-to-mount ...
- Stalstack 连接管理配置
Stalstack 连接管理配置 注:master端,minion端,配置完成. Saltstack master 测试管理端minion链接状态. salt-key Accepted Keys: ...
- Linux系统中使用netcat命令的奇技淫巧
netcat是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据.通过与其他工具结合和重定向,你可以在脚本中以多种方式使用它.使用netcat命令所能完成的事情令人惊讶. netcat所做的 ...
- Treflection01_Class对象_构造函数_创建对象
1. package reflectionZ; import java.lang.reflect.Constructor; import java.util.List; public class Tr ...
- 牛客练习赛13D
定义一个数字为幸运数字当且仅当它的所有数位都是4或者7.比如说,47.744.4都是幸运数字而5.17.467都不是.现在想知道在1...n的第k小的排列(permutation,https://en ...
- wget 官方jdk
每次下载jdk都是一件头疼的事,特别是在服务器上下载. 之前想的是下载到本地,然后通过ftp工具传上去.汗.. 后来想到用wget 直接下载到服务器上. 在网上找了几个例子,wget 加参数,如:wg ...