被百度搜到的题解(论文?)坑了。

写的那玩意好像石乐志。。。


Description

一棵二叉树采用以下规则描述:
1.如果一个节点度数为0,则仅用一个元素“0”来描述它。
2.如果一个节点度数为1,则对它的描述以“1”开头,后面接着对它的孩子的描述。
3.如果一个节点度数为2,则对它的描述以“2”开头,后面接着的首先是它的左孩子的描述,然后是右孩子的描述。
在树中每一个节点必须被着为红色、绿色或蓝色。然而,我们必须遵循如下规定:
1.根点和它的孩子不能有相同的颜色。
2.如果一个节点有两个孩子,那么这两个节点必定有两个不同的颜色。
有多少个节点可以被着为绿色呢?
任务
写一个程序:
1.读取对一棵树的描述。
2.计算可以被着为绿色的节点的最大值和最小值。
3.把结果输出

Input

首行是由一个字符串组成(不长于10000字符),它是对一棵树的描述。

Output

首行两个用空格隔开的整数,它们分别表示可以被着为绿色的节点的最大和最小数目。

Sample Input

1122002010

Sample Output

5 2

其实很傻的一道题。一看AC数和Submit数就知道了。
简单树dp即可。代码十分工整且难看。。。
#include<bits/stdc++.h>
#define L t[u].ls
#define R t[u].rs
using namespace std;
const int mxn=;
inline int read(){
int r=,f=;char c=getchar();
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){r=r*+c-'';c=getchar();}
return r*f;
}
int n,c=;
char s[mxn];
struct Node{
int ls,rs;
}t[mxn];
void dfs1(int u){
if(s[u]==''){
t[u].ls=t[u].rs=-;
}
else if(s[u]==''){
c++;t[u].ls=c;
dfs1(c);
t[u].rs=-;
}
else{
c++;t[u].ls=c;
dfs1(c);
c++;t[u].rs=c;
dfs1(c);
}
}
void init(){
scanf("%s",s+);
n=strlen(s+);
dfs1();
}
int f[mxn][],g[mxn][];
void dfs2(int u){
f[u][]=g[u][]=;
f[u][]=g[u][]=;
f[u][]=g[u][]=;
if(s[u]=='')return;
dfs2(L);
if(!~R){
f[u][]+=max(f[L][],f[L][]);
f[u][]+=max(f[L][],f[L][]);
f[u][]+=max(f[L][],f[L][]);
g[u][]+=min(g[L][],g[L][]);
g[u][]+=min(g[L][],g[L][]);
g[u][]+=min(g[L][],g[L][]);
}
else{
dfs2(R);
f[u][]+=max(f[L][]+f[R][],f[L][]+f[R][]);
f[u][]+=max(f[L][]+f[R][],f[L][]+f[R][]);
f[u][]+=max(f[L][]+f[R][],f[L][]+f[R][]);
g[u][]+=min(g[L][]+g[R][],g[L][]+g[R][]);
g[u][]+=min(g[L][]+g[R][],g[L][]+g[R][]);
g[u][]+=min(g[L][]+g[R][],g[L][]+g[R][]);
}
}
int main(){
init();
dfs2();
cout<<max(f[][],max(f[][],f[][]))<<' '<<min(g[][],min(g[][],g[][]));
}
 
 
 

[bzoj2932][POI1999]树的染色问题的更多相关文章

  1. codevs 1191 树轴染色 线段树区间定值,求和

    codevs 1191 树轴染色 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://www.codevs.cn/problem/1191/ Des ...

  2. HDU3974 Assign the task(多叉树转换为线段+线段树区间染色)

    题目大意:有n个人,给你他们的关系(老板和员工),没有直属上司的人就是整个公司的领导者,这意味着n个人形成一棵树(多叉树).当一个人被分配工作时他会让他的下属也做同样的工作(并且立即停止手头正在做的工 ...

  3. ZOJ 1610.Count the Colors-线段树(区间染色、区间更新、单点查询)-有点小坑(染色片段)

    ZOJ Problem Set - 1610 Count the Colors Time Limit: 2 Seconds      Memory Limit: 65536 KB Painting s ...

  4. hdu 5023(线段树区间染色,统计区间内颜色个数)

    题目描述:区间染色问题,统计给定区间内有多少种颜色? 线段树模板的核心是对标记的处理 可以记下沿途经过的标记,到达目的节点之后一块算,也可以更新的时候直接更新到每一个节点 Lazy操作减少修改的次数( ...

  5. SDOI2017 树点染色

    \[SDOI2017 树点染色\] 题目描述 Bob 有一棵 $ n $ 个点的有根树,其中 $ 1 $ 号点是根节点.Bob 在每个节点上涂了颜色,并且每个点上的颜色不同. 定义一条路径的权值是,这 ...

  6. 线段树区间染色 ZOJ 1610

    Count the Colors ZOJ - 1610 传送门 线段树区间染色求染色的片段数 #include <cstdio> #include <iostream> #in ...

  7. 5.29 省选模拟赛 树的染色 dp 最优性优化

    LINK:树的染色 考场上以为这道题要爆蛋了 没想到 推出正解来了. 反正是先写了爆搜的 爆搜最近越写越熟练了 容易想到dp 容易设出状态 f[i][j]表示以i为根的子树内白色的值为j此时黑色的值怎 ...

  8. POJ 1436 (线段树 区间染色) Horizontally Visible Segments

    这道题做了快两天了.首先就是按照这些竖直线段的横坐标进行从左到右排序. 将线段的端点投影到y轴上,线段树所维护的信息就是y轴区间内被哪条线段所覆盖. 对于一条线段来说,先查询和它能相连的所有线段,并加 ...

  9. POJ 2528 Mayor's posters (线段树,染色问题,离散化要注意)

    做这题建议看一下该题的discuss. #include <iostream> #include <stdio.h> #include <string.h> #in ...

随机推荐

  1. Myeclipse与tomcat的运行问题

    在myeclipse中修改自己servlet后,在次运行时,可能会没有变化,这时需要重启tomcat,重新加载servlet

  2. SharePoint 和 Windows Phone 7 开发人员培训资源

     该工具包包括单位数目: Windows Phone 7 发展简介 在本单元中,您将了解真实的消费信息存储在 SharePoint 中与你用 Visual Studio 写 Windows Phone ...

  3. 【Troubleshooting 】Outlook 客户端无法显示电子邮件图像

    出于安全原因,Outlook 2013/2016不会在电子邮件中显示图像,但您可以右键单击图像并选择" 下载图片 "选项.我最近注意Outlook停止显示图像,并且没有下载图像的选 ...

  4. 自定义 sql Split函数 / 自定义mp_helptext查看存储

    1. 分割函数: --Split 表函数将一个字符串按指定分隔符进行分割,返回一个表. create function split( ),--待分割字符串 )--分割符 ))) as begin ) ...

  5. Visual Studio 编辑器打开项目后,一直提醒Vs在忙,解决方法

    今天打开VS2015后,因为这个解决中有很项目,突然就一直现在加载中,点击VS提示在忙,怎么破那?请往下看 第一种方法 1.关闭VS: 2.去C:\Users\<your users name& ...

  6. Multi-modal Sentence Summarization with Modality Attention and Image Filtering 论文笔记

     文章已同步更新在https://ldzhangyx.github.io/,欢迎访问评论.   五个月没写博客了,不熟悉我的人大概以为我挂了…… 总之呢这段时间还是成长了很多,在加拿大实习的两个多月来 ...

  7. mysql在控制台里出现中文问号问题

    由于重装了wampserver,之前遇到的问题统统会重新出现,那么今天遇到的是在mysql控制台中,在表里输入中文数据,却出现问号的问题: 那么这个就跟编码有关系了,那么,我们就去wampserver ...

  8. 【JavaScript 封装库】BETA 5.0 测试版发布!

    JavaScript 前端框架(封装库) BETA 5.0 已于10月10日正式发布,今天开始提供 BETA 5.0 的 API 参考文献.相较于之前 5 个版本的发布都是草草的提供源代码,并没有很多 ...

  9. 1.10 从表中随机返回n条记录

    同时使用内置函数的rand函数. limit 和order by: select * from emp order by rand() limit 2;

  10. OpenCV2马拉松第5圈——线性滤波

    收入囊中 这里的非常多内容事实上在我的Computer Vision: Algorithms and ApplicationsのImage processing中都有讲过 相关和卷积工作原理 边界处理 ...