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

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


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. [topcoder]TheConsecutiveIntegersDivOne

    http://community.topcoder.com/stat?c=problem_statement&pm=13625&rd=16278 首先,如果记得曼哈顿距离最小值那个问题 ...

  2. input-file类型accept 属性对性能的影响

    上传图片的时候,有时会加一些限制,如下,进行上传类型的过滤,如 <input type="file" name="pic" id="pic&qu ...

  3. 五环之歌之PHP分页

    根据以往的经验,对于很多初学者,分页功能实现起来还是有一定的困难的,为了帮大家解决这样的问题:特此献上五环之歌.从此分页功能便是如小岳岳唱歌一样简练,漂亮,精干.哈哈,不闲扯了.正式进入千锋PHP五环 ...

  4. git github添加远程仓库出错 remote origin already exists

    在github上建立了仓库后,执行 git remote add origin https://github.com/zhangsan/sample.git时,提示 remote origin alr ...

  5. 【转载】#330 - Derived Classes Do Not Inherit Constructors

    A derived class inherits all of the members of a base class except for its constructors. You must de ...

  6. Pascal之Hello World

    Pascal入门篇. 平台:Windows 7 ultimate x64 工具:Free Pascal 下载安装,界面如下: 右键属性,选择“437(OEM-美国)”,重新打开程序,乱码消失.     ...

  7. openstack kilo python cinderclient

    ➜  ~ pythonPython 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on ...

  8. 移除input number上的spinner

    HTML 5 的表单中有着丰富的input种类,比如说input[type="number"],就可以保证用户输入数字,但是input也有一些不好的地方——带有 spinner. ...

  9. 使用Mac的过程中的一些小操作

    前言:使用Mac的过程中的一些小操作 查看Mac系统是32位还是64位: 方法1: 点击左上角的苹果按钮->关于本机->概览->系统报告->软件->偏好设置面板:右侧有提 ...

  10. 5.vue解决动态img :src绑定

    前言: 因为静态资源在vue中是需要经过编译的, 所以动态拼接的图片地址,在:src的时候不经过编译. 就会发生图片404,找不到资源. 那么本地图片资源如何动态的绑定呢? 实践: 其实,真相往往就是 ...