1864: [Zjoi2006]三色二叉树

Time Limit: 1 Sec  Memory Limit: 64 MB
Submit: 1295  Solved: 961
[Submit][Status][Discuss]

Description

Input

仅有一行,不超过500000个字符,表示一个二叉树序列。

Output

输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色。

Sample Input

1122002010

Sample Output

5 2

HINT

 

Source

[Submit][Status][Discuss]

HOME Back

其实是一道基础的树规辣~一开始觉得难点可能在建边上,可是建边也很好搞是怎么肥四??(其实就是一道水题

建了边直接dfs往上dp就可以辣!

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; char s[];
int now, len; int dp1[][], dp2[][], son[][];
int MA, MI; int stot, tov[], nex[], h[]; void add ( int u, int v ) {
tov[++stot] = v;
nex[stot] = h[u];
h[u] = stot;
} void build ( int pos, int f ) {
add ( f, pos ); add ( pos, f );
if ( s[pos-] == '' ) {
now = pos;
return ;
}
if ( s[pos-] == '' ) {
build ( pos + , pos );
}
if ( s[pos-] == '' ) {
build ( pos + , pos );
build ( now + , pos );
}
} void dfs ( int u, int f ) {
for ( int i = h[u]; i; i = nex[i] ) {
int v = tov[i];
if ( v == f ) continue;
dfs ( v, u );
son[u][son[u][]++] = v;
}
int l = son[u][], r = son[u][];
if ( son[u][] == ) {
dp1[u][] = max ( dp1[l][], dp1[l][] );
dp1[u][] = max ( dp1[l][], dp1[l][] );
dp1[u][] = max ( dp1[l][], dp1[l][] ) + ;
dp2[u][] = min ( dp2[l][], dp2[l][] );
dp2[u][] = min ( dp2[l][], dp2[l][] );
dp2[u][] = min ( dp2[l][], dp2[l][] ) + ;
} else if ( son[u][] == ){
dp1[u][] = max ( dp1[l][] + dp1[r][], dp1[r][] + dp1[l][] );
dp1[u][] = max ( dp1[l][] + dp1[r][], dp1[r][] + dp1[l][] );
dp1[u][] = max ( dp1[l][] + dp1[r][], dp1[r][] + dp1[l][] ) + ;
dp2[u][] = min ( dp2[l][] + dp2[r][], dp2[r][] + dp2[l][] );
dp2[u][] = min ( dp2[l][] + dp2[r][], dp2[r][] + dp2[l][] );
dp2[u][] = min ( dp2[l][] + dp2[r][], dp2[r][] + dp2[l][] ) + ;
} else {
dp1[u][] = dp1[u][] = ;
dp1[u][] = ;
dp2[u][] = dp2[u][] = ;
dp2[u][] = ;
}
} int main ( ) {
cin >> s;
len = strlen ( s );
build ( , );
dfs ( , );
MA = max ( dp1[][], max ( dp1[][], dp1[][] ) );
MI = min ( dp2[][], min ( dp2[][], dp2[][] ) );
printf ( "%d %d", MA, MI );
}

【BZOJ】1864: [Zjoi2006]三色二叉树的更多相关文章

  1. BZOJ 1864: [Zjoi2006]三色二叉树( 树形dp )

    难得的ZJOI水题...DFS一遍就行了... ----------------------------------------------------------------------- #inc ...

  2. BZOJ 1864: [Zjoi2006]三色二叉树 树形DP + 读入

    Description Input 仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色. 题解:本题大水 ...

  3. 1864: [Zjoi2006]三色二叉树

    1864: [Zjoi2006]三色二叉树 链接 分析: 做得最智障的一题了... 首先中间输出两个数之间没空格(换行居然也过了...), 写了dp[i][0/1/2],后来知道其实dp[i][0/1 ...

  4. 1864. [ZJOI2006]三色二叉树【树形DP】

    Description Input 仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色. Sample ...

  5. bzoj千题计划212:bzoj1864: [Zjoi2006]三色二叉树

    http://www.lydsy.com/JudgeOnline/problem.php?id=1864 #include<cstdio> #include<cstring> ...

  6. BZOJ1864[ZJOI2006]三色二叉树[树形DP]

    1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 773  Solved: 548[Submit][Status] ...

  7. 【BZOJ1864】[Zjoi2006]三色二叉树 树形DP

    1864: [Zjoi2006]三色二叉树 Description Input 仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次表示最多和最 ...

  8. 嘴巴题5 「BZOJ1864」[ZJOI2006] 三色二叉树

    1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1195 Solved: 882 [Submit][Status ...

  9. [ZJOI2006]三色二叉树

    [ZJOI2006]三色二叉树 BZOJ luogu 分3种颜色讨论转移一下 #include<bits/stdc++.h> using namespace std; const int ...

随机推荐

  1. 88.modelsim仿真do文件相关技巧

    网上的关于DO文件的编写好像资料不多,比较杂,所以本人总结一下常用的简单语法,方便大家查看.其实本人也刚接触DO文件没多久,有纰漏很正常,欢迎指正批评,互相学习.PS:写得有点乱   还有一个值得注意 ...

  2. 采用dlopen、dlsym、dlclose加载动态链接库【总结】【转】

    转自:https://www.cnblogs.com/Anker/p/3746802.html 1.前言 为了使程序方便扩展,具备通用性,可以采用插件形式.采用异步事件驱动模型,保证主程序逻辑不变,将 ...

  3. C# FileStream进行FTP服务上传文件和下载文件

    定义FileStream类的操作类:操作类名: FtpUpDown 上传文件 /// <summary> /// 上传文件 /// </summary> /// <par ...

  4. webpack3学习笔记

    地址:https://segmentfault.com/a/1190000006843916 地址:https://www.chungold.com/my/course/32 地址:http://js ...

  5. Linux入门(二)Shell基本命令

    上一篇讲了普通用户切换到root用户,今天补充一点,对于Debian和Ubuntu用户,安装时候只有一个普通用户注册,在需要root权限时,我们可以在普通用户模式下输入sudo这个命令运行某些相关特权 ...

  6. thinkphp框架if标签条件表达式

    eq 等于neq 不等于gt 大于egt 大于等于lt 小于elt 小于等于

  7. 教您如何进行SQL跨表更新

    SQL跨表更新数据是在使用SQL数据库中比较常用的,下面就将为您详细介绍SQL跨表更新数据的步骤,希望对您学习SQL跨表更新数据有所启迪. 原始数据如下,首先是表结构 A_dept的初始数据 A_em ...

  8. SQLServer系统变量使用

    1.@@IDENTITY返回最后插入的标识值.这个变量很有用,当你插入一行数据时,想同时获得该行的的ID(标示列),就可以用@@IDENTITY示例:下面的示例向带有标识列的表中插入一行,并用 @@I ...

  9. LeetCode282. Expression Add Operators

    Given a string that contains only digits 0-9 and a target value, return all possibilities to add bin ...

  10. 20165203《Java程序设计》第五周学习总结

    教材学习内容总结 第七章 内部类 注意内部类和外嵌类的关系: 外嵌类的成员变量和方法在内部类有效 内部类的类体不可以声明static变量和方法.外嵌类的类体可以用内部类声明对象. 内部类仅供它的外嵌类 ...