洛谷 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的树点涂色,考场上也想到了这一点 想到了又有什么用? ...
随机推荐
- 小DEMO之manifest初体验
前言 补漏洞系列~今天来动手体验一下HTML5中的离线应用之mainifest缓存清单.实际上H5还提供了一个JavaScript接口来用于更新缓存文件的方法以及对缓存文件的操作.在Chrome中,输 ...
- 谷歌应用商店chrome扩展程序和APP的发布流程
互联网上有很多大牛,他们再工作中需要一些难题,再找到解决办法后,如果会使用js的话,大多数人就可以自己动手写一个chrome插件,而且非常容易.开发人员都喜欢与大家分享自己的成就!google是一个全 ...
- Quartz--Trigger
TriggerQuartz中的触发器,用来告诉调度程序什么时候触发,即Trigger对象是用来触发Job的 触发器通用属性 JobKey StartTime EndTimeJobKey表示job实例的 ...
- UVA 1596 Bug Hunt (大模拟 栈)
题意: 输入并模拟执行一段程序,输出第一个bug所在的行. 每行程序有两种可能: 数组定义: 格式为arr[size]. 例如a[10]或者b[5],可用下标分别是0-9和0-4.定义之后所有元素均为 ...
- HDU 2475 Box
Box Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 247564 ...
- 莫(meng)比(bi)乌斯反演--BZOJ2301: [HAOI2011]Problem b
n<=50000个询问,每次问a<=x<=b,c<=y<=d中有多少gcd(x,y)=K的(x,y).a,b,c,d,K<=50000. 这大概是入门题辣..这里记 ...
- springmvc json 数据
这里是controllor层 @RequestMapping("/traceupdatestatus") @ResponseBody public boolean traceupd ...
- Windows 10+Ubuntu 16.04在MBR分区上安装双系统之后启动菜单的System Setup选项提示:can't find command "fwsetup"
背景: 硬盘分区方式:MBR 硬盘容量256,Windows 100,Ubuntu 156,其中主分区安装的是Windows,Ubuntu安装在逻辑分区上,文件系统为Ext4,整个Ubuntu就挂载在 ...
- 功能超级强大的网络工具nc
摘自:http://www.linuxso.com/command/nc.html 功能说明:功能强大的网络工具语 法:nc [-hlnruz][-g<网关...>][-G<指向器数 ...
- docker: 通过docker方式安装jenkins
1. docker pull jenkins 2. docker run -d -p 49001:8080 -v $PWD/jenkins:/var/jenkins_home:z -t jenkins ...