Description

Input

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

Output

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

Sample Input

1122002010

Sample Output

5 2

HINT

Source

Day1

题解

这道题我们考虑dp

我们先把树给构造出来(可以用栈,也可以用dfs)

建完树后,我们用f[i][0/1/2][0]表示i节点填绿/蓝/红色的最小答案,f[i][0/1/2][1]表示i节点填绿/蓝/红色的最大答案

我们考虑i节点从两个儿子转移

f[i][0][0]=min(f[s1][1][0]+f[s2][2][0],f[s1][2][0]+f[s2][1][0])

f[i][1][0]=min(f[s1][0][0]+f[s2][2][0],f[s1][2][0]+f[s2][0][0])

f[i][2][0]=min(f[s1][0][0]+f[s2][1][0],f[s1][1][0]+f[s2][0][0])

f[i][0/1/2][1]转移同理

 1 #include<bits/stdc++.h>
 2 #define N 500005
 3 using namespace std;
 4 int tot,top;
 5 int Stack[N];
 6 int f[N][3][2];
 7 char s[N];
 8 int main(){
 9     scanf("%s",s+1);
10     int len=strlen(s+1);
11     for (int i=len;i>=1;i--)
12         if (s[i]=='2'){
13             int x=Stack[top],y=Stack[--top];
14             tot++;
15             f[tot][0][0]=min(f[x][1][0]+f[y][2][0],f[x][2][0]+f[y][1][0])+1;
16             f[tot][1][0]=min(f[x][2][0]+f[y][0][0],f[x][0][0]+f[y][2][0]);
17             f[tot][2][0]=min(f[x][1][0]+f[y][0][0],f[x][0][0]+f[y][1][0]);
18             f[tot][0][1]=max(f[x][1][1]+f[y][2][1],f[x][2][1]+f[y][1][1])+1;
19             f[tot][1][1]=max(f[x][2][1]+f[y][0][1],f[x][0][1]+f[y][2][1]);
20             f[tot][2][1]=max(f[x][1][1]+f[y][0][1],f[x][0][1]+f[y][1][1]);
21             Stack[top]=tot;
22         } else
23         if (s[i]=='1'){
24             int x=Stack[top];
25             tot++;
26             f[tot][0][0]=min(f[x][1][0],f[x][2][0])+1;
27             f[tot][1][0]=min(f[x][0][0],f[x][2][0]);
28             f[tot][2][0]=min(f[x][0][0],f[x][1][0]);
29             f[tot][0][1]=max(f[x][1][1],f[x][2][1])+1;
30             f[tot][1][1]=max(f[x][0][1],f[x][2][1]);
31             f[tot][2][1]=max(f[x][0][1],f[x][1][1]);
32             Stack[top]=tot;
33         } else{
34             tot++;
35             f[tot][0][0]=f[tot][0][1]=1;
36             Stack[++top]=tot;
37         }
38     int Max=max(f[tot][0][1],max(f[tot][1][1],f[tot][2][1]));
39     int Min=min(f[tot][0][0],min(f[tot][1][0],f[tot][2][0]));
40     printf("%d %d",Max,Min);
41     return 0;
42 } 

View Code

转载于:https://www.cnblogs.com/zhuchenrui/p/7794835.html

BZOJ-1864-[Zjoi2006]三色二叉树(树形dp)相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. BZOJ.3227.[SDOI2008]红黑树tree(树形DP 思路)

    BZOJ orz MilkyWay天天做sxt! 首先可以树形DP:\(f[i][j][0/1]\)表示\(i\)个点的子树中,黑高度为\(j\),根节点为红/黑节点的最小红节点数(最大同理). 转移 ...

  9. 【bzoj 1812】[Ioi2005]riv(树形dp)

    1812: [Ioi2005]riv Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 433  Solved: 246 [Submit][Status] ...

  10. bzoj 3162: 独钓寒江雪 树哈希+树形dp

    题意 给出一棵无标号无根树,问本质不同的最大独立集数量.答案模1e9+7. n<=500000 分析 对于一般的情况,我们可以先找出树的重心作为根,然后进行树形dp.这样做有什么好处呢?通过根的 ...

最新文章

  1. 「x is All You Need」,当学术论文开始标题党……
  2. [YTU]_2432( C++习题 对象数组输入与输出)
  3. phalcon:跟踪sql语句
  4. ios 调用c语言函数指针,第09天C语言(08):指向函数的指针的应用场景
  5. 天融信防火墙NGFW4000配置
  6. 回归专题 | regression
  7. Open XML操作Excel导入数据
  8. AIDA64自动监控计算机硬件工作情况
  9. 使用Sphinx对MySQL数据库进行全文检索
  10. 【整理】3dsMax中毒了怎么办
  11. c语言vs2013下载官方下载,Microsoft Visual C++2013运行库下载
  12. Android studio真机运行失败,提示“软件包似乎无效” “应用程序安装异常(-15)”
  13. golang中net/http包用法
  14. 刚刚!国产大数据基础软件第一股星环科技成功上市,开盘大涨超52%
  15. 天猫淘宝卡券包演进史
  16. html 整体边距,html内容左右边距怎么设置
  17. 【redis】二、redis数据类型
  18. Maven 是什么东西?
  19. 在前端页面生成二维码并下载(兼容IE)
  20. 校内练习 华山论剑 [最短路]

热门文章

  1. Hadoop + MapReduce 端口自定义配置
  2. jquery如何对多个对象绑定同一事件
  3. [转载]在Eclipse CDT中编译含有多个main函数的项目
  4. 手把手教你写ORM(三)
  5. CustomValidator验证控件的ServerValidate事件
  6. 微信小程序把玩(十一)icon组件
  7. Python多进程编程
  8. Google Container Engine进军生产环境,容器技术势不可挡
  9. UVA 10954 - Add All
  10. 如何着手学习一个新的PHP框架