1864: [Zjoi2006]三色二叉树

链接

分析:

  做得最智障的一题了。。。

  首先中间输出两个数之间没空格(换行居然也过了。。。), 写了dp[i][0/1/2],后来知道其实dp[i][0/1]就行了,最zz的一个bug,,,char pos = 1...

代码:

 1 #include<cstdio>
 2 #include<iostream>
 3 #define L ls[u]
 4 #define R rs[u]
 5
 6 using namespace std;
 7
 8 const int N = 500100;
 9
10 int ls[N],rs[N],dp1[N][3],dp2[N][3],pos = 1;
11 char s[N];
12
13 void dfs(int u) {
14     if (s[u] == '0') return;
15     if (s[u] == '1' || s[u] == '2') {
16         L = ++pos;
17         dfs(pos);
18     }
19     if (s[u] == '2') {
20         R = ++pos;
21         dfs(pos);
22     }
23 }
24
25 int tsl,tsr;
26 void DP(int u) {
27     if (!u) return ;
28     dp1[u][0] = 1;dp1[u][1] = dp1[u][2] = 0;
29     dp2[u][0] = 1;dp2[u][1] = dp2[u][2] = 0;
30
31     DP(L);
32     DP(R);
33
34     dp1[u][0] = max(dp1[L][1] + dp1[R][2], dp1[L][2] + dp1[R][1]) + 1;
35     dp1[u][1] = max(dp1[L][0] + dp1[R][2], dp1[L][2] + dp1[R][0]);
36     dp1[u][2] = max(dp1[L][0] + dp1[R][1], dp1[L][1] + dp1[R][0]);
37
38     dp2[u][0] = min(dp2[L][1] + dp2[R][2], dp2[L][2] + dp2[R][1]) + 1;
39     dp2[u][1] = min(dp2[L][0] + dp2[R][2], dp2[L][2] + dp2[R][0]);
40     dp2[u][2] = min(dp2[L][0] + dp2[R][1], dp2[L][1] + dp2[R][0]);
41 }
42 int main () {
43     scanf("%s",s+1);
44     dfs(1);
45 /*  for (int i=1; i<=n; ++i)
46         cout << ls[i] << " "<< rs[i] << "\n";*/
47     DP(1);
48     cout << max(dp1[1][0],max(dp1[1][1],dp1[1][2])) << " ";
49     cout << min(dp2[1][0],min(dp2[1][1],dp2[1][2]));
50     return 0;
51 }

转载于:https://www.cnblogs.com/mjtcn/p/9199584.html

1864: [Zjoi2006]三色二叉树相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. java substring 性能_《Java程序性能优化》subString()方法的内存泄露
  2. linux 别名管理,Linux 的 15 个命令行别名, 帮系统管理员提升工作效率!
  3. mysql 避免使用临时表_从日期范围中选择时防止MySQL使用临时表
  4. python3 raise 抛出异常
  5. python:装饰器
  6. 基于FPGA的波速形成系统的实现
  7. Maven-EclipseEE使用Maven构建Java web项目从0到1
  8. 十大流氓骚扰软件卸载秘籍
  9. hbuilderx 小程序分包_基于uniapp的微信小程序之分包
  10. 机器学习评价指标大汇总
  11. Hadoop MapReduce执行过程(一)
  12. 【Java数据结构】栈和队列
  13. python opencv 录制视频_python - 使用Opencv Python多线程录制视频 - 堆栈内存溢出
  14. 查看 Linux 中文件打开情况
  15. Redis和MySQL的结合方案
  16. JProfiler分析CPU占用实用教程
  17. 如何搭建运营级的网络直播平台
  18. 关于AP没办法获取IP地址故障排查及思路。
  19. 微信公众号添加html,微信公众号添加页面模板怎么开通?
  20. 3.3.3 使用集线器的星形拓补

热门文章

  1. python如何调用图片-用python简单处理图片(4):图像中的像素访问
  2. 学python要考什么证-这十个Python常用库,学习Python的你必须要知道!
  3. 零基础自学python的app-零基础入门免费学Python 课程和APP推荐
  4. 如何用python画数据图-利用Python绘制数据的瀑布图的教程
  5. 不懂编程可以自学python吗-我不会编程,也可能学会Python吗?
  6. python写小程序-用python编写一个闹钟小程序
  7. python好吗-自学python好吗?跟培训比那个好?
  8. python入门要多久-初学者如何快速上手python入门要多久
  9. python如何读取excel数据-使用Python读取电子表格中的数据
  10. python面试-python面试问题集锦