洛谷 P2585 [ ZJOI 2006 ] 三色二叉树 —— 树形DP
题目:https://www.luogu.org/problemnew/show/P2585
首先,三色其实记录两种状态:是绿色,不是绿色 即可,因为红蓝可以随意取反;
一开始因为懒得还原出树,所以写了个错误贪心-_-
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int const maxn=;
int k,mx,mn,siz[maxn];
char a[maxn];
int dfs()
{
k++; siz[k]=; int tmp=k;//
int nw=a[k]-'';
if(nw==)return siz[k];
else if(nw==)siz[tmp]+=dfs();
else siz[tmp]+=dfs(),siz[tmp]+=dfs();
return siz[tmp];
}
void dfsmx(int col)
{
if(col)mx++;
k++; int nw=a[k]-'';
if(nw==)return;
else if(nw==)dfsmx(!col);
else
{
if(siz[k+]<siz[k]-siz[k+])dfsmx(!col),dfsmx();
else dfsmx(),dfsmx(!col);
}
}
void dfsmn(int col)
{
if(col)mn++;
k++; int nw=a[k]-'';
if(nw==)return;
else if(nw==)dfsmn();
else
{
if(siz[k+]>siz[k]-siz[k+])dfsmn(!col),dfsmn();
else dfsmn(),dfsmn(!col);
}
}
int main()
{
scanf("%s",a+);
k=; dfs();
k=; dfsmx();
k=; dfsmn();
printf("%d %d\n",mx,mn);
return ;
}
囧
实际上是树形DP啦,f[x][0/1] 表示 x 选非绿色或绿色的最大答案,g[x][0/1] 表示最小答案;
然后转移即可。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int const maxn=5e5+;
int n,k,ls[maxn],rs[maxn],f[maxn][],g[maxn][];
char a[maxn];
void init()
{
k++; int nw=a[k]-''; int tmp=k;
if(nw==)return;
else if(nw==)ls[tmp]=k+,init();
else ls[tmp]=k+,init(),rs[tmp]=k+,init();
}
void dfs(int x)
{
f[x][]=; g[x][]=;
if(!ls[x])return;
else if(!rs[x])
{
int u=ls[x];
dfs(u);
f[x][]+=f[u][]; f[x][]+=f[u][];
g[x][]+=g[u][]; g[x][]+=g[u][];
}
else
{
int u=ls[x],v=rs[x];
dfs(u); dfs(v);
f[x][]+=max(f[u][]+f[v][],f[u][]+f[v][]);
f[x][]+=f[u][]+f[v][];
g[x][]+=min(g[u][]+g[v][],g[u][]+g[v][]);
g[x][]+=g[u][]+g[v][];
}
}
int main()
{
scanf("%s",a+);
k=; init();
dfs();
printf("%d %d\n",max(f[][],f[][]),min(g[][],g[][]));
return ;
}
洛谷 P2585 [ ZJOI 2006 ] 三色二叉树 —— 树形DP的更多相关文章
- BZOJ 1864: [Zjoi2006]三色二叉树( 树形dp )
难得的ZJOI水题...DFS一遍就行了... ----------------------------------------------------------------------- #inc ...
- BZOJ1864[ZJOI2006]三色二叉树[树形DP]
1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 773 Solved: 548[Submit][Status] ...
- 【BZOJ-1864】三色二叉树 树形DP
1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 659 Solved: 469[Submit][Status] ...
- 【BZOJ1864】[Zjoi2006]三色二叉树 树形DP
1864: [Zjoi2006]三色二叉树 Description Input 仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次表示最多和最 ...
- 三色二叉树——树形dp
三色二叉树 题目描述 一棵二叉树可以按照如下规则表示成一个由 \(0.1.2\) 组成的字符序列,我们称之为"二叉树序列 \(S\) ": \(0\) 该树没有子节点. \(1S_ ...
- [luogu2585 ZJOI2006] 三色二叉树 (树形dp)
传送门 Description Input 输入文件名:TRO.IN 输入文件仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件名:TRO.OUT 输出文件也只有一行,包 ...
- 洛谷 2585 [ZJOI2006]三色二叉树——树形dp
题目:https://www.luogu.org/problemnew/show/P2585 可以把不是绿色的记成一种.仔细一想不会有冲突.如果自己是绿色,孩子的不同颜色不会冲突:如果自己不是绿色,自 ...
- BZOJ 1864: [Zjoi2006]三色二叉树 树形DP + 读入
Description Input 仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色. 题解:本题大水 ...
- 洛谷P4338 [ZJOI2018]历史(LCT,树形DP,树链剖分)
洛谷题目传送门 ZJOI的考场上最弱外省选手T2 10分成功滚粗...... 首先要想到30分的结论 说实话Day1前几天刚刚刚掉了SDOI2017的树点涂色,考场上也想到了这一点 想到了又有什么用? ...
随机推荐
- Linux中CentOS网络配置以及与Xshell建立远程连接
为centos配置网络 (1)第一步 点开虚拟机的设置,如下图做相关的设置: 网络连接要选择桥接模式,其他的勾选就按照上图的即可,勾选完成点击确定. (2)第二步 点击VMware的编辑选项,找到“虚 ...
- 语法,if,while循环,for循环
目录 一.语法 二.while循环 三.for循环 一.语法 if: if判断其实是在模拟人做判断.就是说如果这样干什么,如果那样干什么.对于ATM系统而言,则需要判断你的账号密码的正确性. if 条 ...
- Python中的列表(5)
1.使用函数 range() 创建一个数字列表 for value in range(1,5): print(value) console: 我们发现,它并不会打印数字5,因为 range() 函数, ...
- Windows和Linux启动虚拟环境
快速跳转到Linux操作 Windows启动虚拟环境 <!--tab回车可以补全--> 安装virtualenv pip install virtualenv 创建虚拟环境 方法一: py ...
- 易维信(EVTrust)支招五大技巧识别钓鱼网站
网上购物和网上银行凭借其便捷性和通达性,在互联网上日渐流行.在互联网上,你可以随时进行转账汇款或进行交易.据艾瑞咨询发布<2008-2009年中国网上支付行业发展报告>显示:中国互联网支付 ...
- 完美解决了span的宽度设置
下 面代码的CSS定义完美解决了span的宽度设置问题.由于浏览器通常对不支持的CSS属性采取忽略处理的态度,所以最好将display:inline -block行写在后面,这样在Firefox里面, ...
- hdu 1828 Picture(线段树,扫描线)
A number of rectangular posters, photographs and other pictures of the same shape are pasted on a wa ...
- XMLREADER/DOM/SIMPLEXML 解析大文件
DOM和simplexml处理xml非常的灵活方便,它们的内存组织结构与xml文件格式很相近.但是同时它们也有一个缺点,对于大文件处理起来力不从心,太耗内存了. 还好有xmlreader,基于流的解析 ...
- CentOS7使用mount命令来挂载CDROM
https://blog.csdn.net/testcs_dn/article/details/41448557
- Codeforces Round #374 (Div. 2) C DAG上dp
C. Journey time limit per test 3 seconds memory limit per test 256 megabytes input standard input ou ...