Description

Input

仅有一行,不超过500000个字符,表示一个二叉树序列。

Output

输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色。

Sample Input

1122002010

Sample Output

5 2

HINT

Source

Day1

思路: 本题是树型dp,题目给出的字符序列刚好可以递归构造二叉树。

然后用f[x][0],g[x][0]分别表示当x涂成绿色的时候这个子树绿色的点最多和最少的数量。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define re register
 4 #define R  re int
 5 #define rep(i,a,b) for(R i=a;i<=b;i++)
 6 #define Rep(i,a,b) for(R i=a;i>=b;i--)
 7 #define ms(i,a)    memset(a,i,sizeof(a))
 8 #define lc         ch[x][0]
 9 #define rc         ch[x][1]
10 template<class T>void read(T &x){
11   x=0; char c=0;
12   while (!isdigit(c)) c=getchar();
13   while (isdigit(c)) x=x*10+(c^48),c=getchar();
14 }
15 int const N=500001;
16 int const inf=1e8;
17 int n,ch[N][2],f[N][3],sum,x,g[N][3];
18 char s[N];
19 void dfs(){
20   int t=++sum;
21   if(s[x]=='0') return;
22   if(s[x]=='1') ch[t][0]=sum+1,x++,dfs();
23   if(s[x]=='2'){
24     ch[t][0]=sum+1; x++;dfs();
25     ch[t][1]=sum+1; x++;dfs();
26   }
27 }
28 void solve(int x){
29   if(x==0) return ;
30   if(!lc){
31     f[x][0]=g[x][0]=1;  return;
32   }
33   solve(lc); solve(rc);
34   if(!rc){
35     f[x][0]=1+max(f[lc][1],f[lc][2]);
36     f[x][1]=max(f[lc][0],f[lc][2]);
37     f[x][2]=max(f[lc][0],f[lc][1]);
38     g[x][0]=1+min(g[lc][1],g[lc][2]);
39     g[x][1]=min(g[lc][0],g[lc][2]);
40     g[x][2]=min(g[lc][0],g[lc][1]);
41   }else {
42     f[x][0]=1+max(f[lc][1]+f[rc][2],f[lc][2]+f[rc][1]);
43     f[x][1]=max(f[lc][0]+f[rc][2],f[rc][0]+f[lc][2]);
44     f[x][2]=max(f[lc][0]+f[rc][1],f[rc][0]+f[lc][1]);
45     g[x][0]=1+min(g[lc][1]+g[rc][2],g[lc][2]+g[rc][1]);
46     g[x][1]=min(g[lc][0]+g[rc][2],g[rc][0]+g[lc][2]);
47     g[x][2]=min(g[lc][0]+g[rc][1],g[rc][0]+g[lc][1]);
48   }
49 }
50 int main(){
51   scanf("%s",s);
52   dfs();
53   solve(1);
54   printf("%d %d\n",max(f[1][0],max(f[1][1],f[1][2])),min(g[1][0],min(g[1][1],g[1][2])));
55   return 0;
56 }

View Code

转载于:https://www.cnblogs.com/ZJXXCN/p/10189090.html

bzoj 1864 三色二叉树相关推荐

  1. 1864: [Zjoi2006]三色二叉树

    1864: [Zjoi2006]三色二叉树 链接 分析: 做得最智障的一题了... 首先中间输出两个数之间没空格(换行居然也过了...), 写了dp[i][0/1/2],后来知道其实dp[i][0/1 ...

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

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

  3. bzoj 1864: [Zjoi2006]三色二叉树

    Description solution 正解:递归+树型DP 我们首先递归建树 然后考虑树型DP,我们设绿色的节点为Y,非绿色为N 我们神奇的发现:N会形成是很多条相互独立的链 也就是说 Y 的下发 ...

  4. 1864. [ZJOI2006]三色二叉树【树形DP】

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

  5. BZOJ-1864-[Zjoi2006]三色二叉树(树形dp)

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

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

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

  7. 洛谷 2585 [ZJOI2006]三色二叉树——树形dp

    题目:https://www.luogu.org/problemnew/show/P2585 可以把不是绿色的记成一种.仔细一想不会有冲突.如果自己是绿色,孩子的不同颜色不会冲突:如果自己不是绿色,自 ...

  8. 2017.9.24 三色二叉树 思考记录

    树形dp入门题,,,,枚举转移即可. 设f[i][0]表示这个点不是绿色 f[i][1]表示这个点是绿色. 由于要求是相邻和两儿子,所以枚举下面点的情况转移就可以了 码: #include<io ...

  9. 洛谷P2585[ZJOI2006]三色二叉树(树形DP)

    思路 树形DP,首先是递归建树,然后是DP状态方程转移. 代码 #include<cstdio> #include<cstring> #include<algorithm ...

  10. 三色视者与四色视者身后的理论基础:色彩原理

    理论上,常人的肉眼是三色视觉(Trichromacy),通过三种视锥细胞(也可以说感光色素)来生成蓝色.绿色和红色的波长.但是,肉眼的不足之处是存在同色异谱色(metamers),也就是说尽管色彩看起 ...

最新文章

  1. Shell引用-逻辑判断
  2. php 该throw还是该404,前端魔法堂——异常不仅仅是try/catch
  3. nyist --- 组队赛(四)
  4. 苹果4怎么越狱_苹果手机如何截屏
  5. 小程序 array.map_Array.map解释了4个复杂级别:从5岁到功能程序员。
  6. mysql源码分析书籍_从源码分析 MySQL 死锁问题入门
  7. Node.js webpack 打包的入口与出口
  8. 磁盘格式化(mkfs命令)、磁盘挂载(mount)、手动添加swap
  9. Java序列化中的SerialVersionUid
  10. 迅雷下gho文件变成php,GHO格式文件转换成WIM格式文件
  11. android 会自动横屏再竖屏,Android横屏竖屏切换的问题
  12. 如何免费申请js.org二级域名
  13. jQuery购物车 商品数量加减和小计
  14. vue动态增加商品属性
  15. ros入门启动小海龟(ros2版本)
  16. 湖人詹姆斯 戴维斯 拉塞尔三人合体就赢!
  17. echart各个柱体设置不同颜色
  18. linux的crontab定时任务完整配置和定时任务不执行分析
  19. java视频点播系统_jsp教学视频点播系统
  20. ubuntu 进入紧急救援模式

热门文章

  1. 应届生,一口气拿下微软、Hulu、Amazon、腾讯、百度、网易、美团、华为等18家公司SP Offer面经...
  2. 局域网传文件_iPhone与安卓跨系统「隔空投送」,传大文件超好用
  3. 使用Hexo 在本地搭建博客(一)
  4. C语言入门(一)——程序的基本概念
  5. 论文解析 | 不确定性校准的化学反应预测模型
  6. 深度学习中对神经网络的理解
  7. projective TSDF/TSDF/flipped TSDF三种截断符号距离函数比较的个人理解
  8. 虽然没有见过凌晨四点的洛杉矶,但是我们见证了了凌晨灯火通明科技园:程序员的痛谁懂
  9. Cuba 设置debug模式
  10. ArcGIS10.6基本操作——利用DEM给点赋予高程值