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. (DBA之路【五】)关于锁的故事
  2. 史上更全面的数据库分库分表、数据一致性、主键分配思路!
  3. 聊聊Dubbo - Dubbo可扩展机制源码解析
  4. weboffice 应用
  5. tf.where 用法
  6. vs2019+wdk10开发 xp, win7, win10 驱动
  7. 145. 超市【小根堆 贪心】
  8. the value of esp was not properly saved
  9. 浅谈 trie树 及其实现
  10. 我从小米裸辞后进Shopee了...
  11. 多线程3,线程池封装库
  12. JavaScript变量相关总结
  13. 服务器更新维护尚未全部完成,【已开服】11月21日全部服务器更新维护公告
  14. Excel如何批量生成条形码
  15. ccxprocess启动项可以禁用么_启动项禁用
  16. Document/View/Frame三口组深入探讨
  17. SQL读取Excel数据
  18. ios点击推送闪退_关于苹果手机QQ闪退的问题
  19. merge和AMVP
  20. windows7 VCP安装失败的解决办法

热门文章

  1. python没有英文基础能学吗-初中毕业没有英语基础能学编程吗?该学C或者Python?...
  2. 中国最大的python社区-python找最大值
  3. python面试-马哥教育官网-专业Linux培训班,Python培训机构
  4. python的编程模式-实例解析Python设计模式编程之桥接模式的运用
  5. 2018python好找工作吗-2018年IT行业薪资大揭秘:你拖后腿了吗?
  6. python财务-财务方面的学生如何学习python?
  7. python编程从入门到精通pdf-Python编程从入门到精通.pdf
  8. php和python交互-Python如何实现简单的用户交互程序(示例)
  9. 自学python有用吗-普通人学Python有用吗?学完能做什么?
  10. python画出心形图-python画出心形图