洛谷 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的树点涂色,考场上也想到了这一点 想到了又有什么用? ...
随机推荐
- hdu4428(Coder)线段树
Coder Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- django-2 models
一个model 对应DB的一张表 models 以类的形式表现: 一些字段.数据的一些行为 对类.类的对象 操作,无需写SQL = > object relation mapping ORM ...
- Python之模块和包导入
Python之模块和包导入 模块导入: 1.创建名称空间,用来存放模块XX.py中定义的名字 2.基于创建的名称空间来执行XX.py. 3.创建名字XX.py指向该名称空间,XX.名字的操作,都是以X ...
- es6(var,let,const,set,map,Array.from())
1.变量声明--var,const,let 1.1 var - (全局作用域,局部作用域)会有变量提升 //第一个小例子 <script> var num = 123; function ...
- String字符串类的获取功能
StringDemo.java /* * String类的获取功能: * int length():获取字符串的长度,其实也就是字符个数 * char charAt(int index):获取指定索引 ...
- 字符串类String类的判断功能
StringDemo.java /* * Object:是类层级结构中的根类,所有的类都直接或间接的继承自该类. * 如果一个方法的形式参数是Object,那么这里我们就可以传递它的任意的子类对象. ...
- Fiddler基本用法:手机抓包
from:https://blog.csdn.net/gld824125233/article/details/52588275 电脑最好是笔记本,这样能和手机保持统一局域网内:其他不多说,直接说步骤 ...
- JQuery_九大选择器
JQuery_九大选择器-----https://blog.csdn.net/pseudonym_/article/details/76093261
- 九度oj 题目1072:有多少不同的面值组合?(set集合)
题目1072:有多少不同的面值组合? 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3627 解决:1852 题目描述: 某人有8角的邮票5张,1元的邮票4张,1元8角的邮票6张,用这些邮 ...
- UI & 原型
UI & 原型 产品原型设计与团队实时协作平台 https://www.xiaopiu.com/download https://www.xiaopiu.com/forum/posts/5b9 ...