1864: [Zjoi2006]三色二叉树
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]三色二叉树相关推荐
- bzoj 1864: [Zjoi2006]三色二叉树
Description solution 正解:递归+树型DP 我们首先递归建树 然后考虑树型DP,我们设绿色的节点为Y,非绿色为N 我们神奇的发现:N会形成是很多条相互独立的链 也就是说 Y 的下发 ...
- 1864. [ZJOI2006]三色二叉树【树形DP】
Description Input 仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色. Sample ...
- 洛谷P2585 [ZJOI2006]三色二叉树
题目描述 输入输出格式 输入格式: 输入文件名:TRO.IN 输入文件仅有一行,不超过10000个字符,表示一个二叉树序列. 输出格式: 输出文件名:TRO.OUT 输出文件也只有一行,包含两个数,依 ...
- 洛谷 2585 [ZJOI2006]三色二叉树——树形dp
题目:https://www.luogu.org/problemnew/show/P2585 可以把不是绿色的记成一种.仔细一想不会有冲突.如果自己是绿色,孩子的不同颜色不会冲突:如果自己不是绿色,自 ...
- 洛谷P2585[ZJOI2006]三色二叉树(树形DP)
思路 树形DP,首先是递归建树,然后是DP状态方程转移. 代码 #include<cstdio> #include<cstring> #include<algorithm ...
- 【BZOJ-1864】三色二叉树 树形DP
1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 659 Solved: 469 [Submit][Statu ...
- BZOJ-1864-[Zjoi2006]三色二叉树(树形dp)
Description Input 仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色. Sample ...
- 2017.9.24 三色二叉树 思考记录
树形dp入门题,,,,枚举转移即可. 设f[i][0]表示这个点不是绿色 f[i][1]表示这个点是绿色. 由于要求是相邻和两儿子,所以枚举下面点的情况转移就可以了 码: #include<io ...
- 三色视者与四色视者身后的理论基础:色彩原理
理论上,常人的肉眼是三色视觉(Trichromacy),通过三种视锥细胞(也可以说感光色素)来生成蓝色.绿色和红色的波长.但是,肉眼的不足之处是存在同色异谱色(metamers),也就是说尽管色彩看起 ...
最新文章
- java substring 性能_《Java程序性能优化》subString()方法的内存泄露
- linux 别名管理,Linux 的 15 个命令行别名, 帮系统管理员提升工作效率!
- mysql 避免使用临时表_从日期范围中选择时防止MySQL使用临时表
- python3 raise 抛出异常
- python:装饰器
- 基于FPGA的波速形成系统的实现
- Maven-EclipseEE使用Maven构建Java web项目从0到1
- 十大流氓骚扰软件卸载秘籍
- hbuilderx 小程序分包_基于uniapp的微信小程序之分包
- 机器学习评价指标大汇总
- Hadoop MapReduce执行过程(一)
- 【Java数据结构】栈和队列
- python opencv 录制视频_python - 使用Opencv Python多线程录制视频 - 堆栈内存溢出
- 查看 Linux 中文件打开情况
- Redis和MySQL的结合方案
- JProfiler分析CPU占用实用教程
- 如何搭建运营级的网络直播平台
- 关于AP没办法获取IP地址故障排查及思路。
- 微信公众号添加html,微信公众号添加页面模板怎么开通?
- 3.3.3 使用集线器的星形拓补
热门文章
- python如何调用图片-用python简单处理图片(4):图像中的像素访问
- 学python要考什么证-这十个Python常用库,学习Python的你必须要知道!
- 零基础自学python的app-零基础入门免费学Python 课程和APP推荐
- 如何用python画数据图-利用Python绘制数据的瀑布图的教程
- 不懂编程可以自学python吗-我不会编程,也可能学会Python吗?
- python写小程序-用python编写一个闹钟小程序
- python好吗-自学python好吗?跟培训比那个好?
- python入门要多久-初学者如何快速上手python入门要多久
- python如何读取excel数据-使用Python读取电子表格中的数据
- python面试-python面试问题集锦