bzoj 1864
思路:随便dp一下
#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define PII pair<int, int>
#define y1 skldjfskldjg
#define y2 skldfjsklejg
using namespace std; const int N = 1e5 + ;
const int M = 5e5 + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = ; int n, L[N], R[N], a[N], f[N][], id, rt, g[N][];
char s[N]; void dfs(int u, int &x) {
x = u;
if(!a[u]) return;
dfs(++id, L[u]);
if(a[u] == ) dfs(++id, R[u]);
} void dp(int u) {
if(!a[u]) {
f[u][] = ;
f[u][] = f[u][] = ;
g[u][] = ;
g[u][] = g[u][] = ;
} else if(a[u] == ) {
dp(L[u]);
f[u][] = min(f[L[u]][], f[L[u]][]) + ;
f[u][] = min(f[L[u]][], f[L[u]][]);
f[u][] = min(f[L[u]][], f[L[u]][]);
g[u][] = max(g[L[u]][], g[L[u]][]) + ;
g[u][] = max(g[L[u]][], g[L[u]][]);
g[u][] = max(g[L[u]][], g[L[u]][]);
} else {
dp(L[u]); dp(R[u]);
f[u][] = min(f[L[u]][] + f[R[u]][], f[L[u]][] + f[R[u]][]) + ;
f[u][] = min(f[L[u]][] + f[R[u]][], f[L[u]][] + f[R[u]][]);
f[u][] = min(f[L[u]][] + f[R[u]][], f[L[u]][] + f[R[u]][]); g[u][] = max(g[L[u]][] + g[R[u]][], g[L[u]][] + g[R[u]][]) + ;
g[u][] = max(g[L[u]][] + g[R[u]][], g[L[u]][] + g[R[u]][]);
g[u][] = max(g[L[u]][] + g[R[u]][], g[L[u]][] + g[R[u]][]);
}
}
int main() {
scanf("%s", s + );
n = strlen(s + );
for(int i = ; i <= n; i++) a[i] = s[i] - '';
dfs(++id, rt); // for(int i = 1; i <= n; i++) printf("%d: %d %d\n", i, L[i], R[i]);
dp();
printf("%d %d\n", max(g[][], max(g[][], g[][])), min(f[][], min(f[][], f[][])));
return ;
}
bzoj 1864的更多相关文章
- BZOJ 1864: [Zjoi2006]三色二叉树( 树形dp )
难得的ZJOI水题...DFS一遍就行了... ----------------------------------------------------------------------- #inc ...
- bzoj 1864 三色二叉树
Written with StackEdit. Description Input 仅有一行,不超过\(5*10^5\)个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次 ...
- BZOJ 1864:[Zjoi2006]三色二叉树(树DP)
三色二叉树 问题描述 输入 仅有一行,不超过500000个字符,表示一个二叉树序列. 输出 输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色. 样例输入 1122002010 ...
- BZOJ 1864: [Zjoi2006]三色二叉树 树形DP + 读入
Description Input 仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色. 题解:本题大水 ...
- BZOJ 1864 三色二叉树 - 树型dp
传送门 题目大意: 给一颗二叉树染色红绿蓝,父亲和儿子颜色必须不同,两个儿子颜色必须不同,问最多和最少能染多少个绿色的. 题目分析: 裸的树型dp:\(dp[u][col][type]\)表示u节点染 ...
- 【BZOJ】1864: [Zjoi2006]三色二叉树
1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 1295 Solved: 961[Submit][Status ...
- 【BZOJ】初级水题列表——献给那些想要进军BZOJ的OIers(自用,怕荒废了最后的六月考试月,刷刷水题,水水更健康)
BZOJ初级水题列表——献给那些想要进军BZOJ的OIers 代码长度解释一切! 注:以下代码描述均为C++ RunID User Problem Result Memory Time Code_Le ...
- BZOJ刷题指南(转)
基础(65) 巨水无比(4):1214.3816:2B题:1000A+B:2462:输出10个1 模拟/枚举/暴力(15):4063傻子模拟:1968小学生暴力:1218前缀和暴力:3856读英文:4 ...
- BZOJ 2127: happiness [最小割]
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1815 Solved: 878[Submit][Status][Di ...
随机推荐
- python访问需要登录的网页
有些网页需要你登录之后才可以访问,你需要提供账户和密码. 只要在发送http请求时,带上含有正常登陆的cookie就可以了. 1.首先我们要先了解cookie的工作原理. Cookie是由服务器端生成 ...
- CSS3笔记-加强版
属性选择器: E[attr]只使用属性名,但没有确定任何属性值 E[attr="value"]指定属性名,并指定了该属性的属性值 E[attr~="value&quo ...
- 2015/9/22 Python基础(18):组合、派生和继承
一个类被定义后,目标就是把它当成一个模块来使用,并把这些对象嵌入到你的代码中去,同其他数据类型及逻辑执行流混合使用.有两种方法可以在你的代码中利用类.第一种是组合,就是让不同的类混合并加入到其他类中, ...
- Log-structured File Systems
换到博客园排版有问题,原版在这里:http://xubenbenhit.github.io/LogStructureFileSystem.html Log-structured File System ...
- 巧用Javascript将相对路径地址转换为绝对路径
这里介绍的其实本质上是两种方法,通过创建DOM或通过JavaScript计算: 1)通过新创建的Image, 经测试会发送一个Aborted的请求,并且IE6不支持, 将new Image改成docu ...
- Lua的各种资源2
Lua Directory This page is a top level directory of all Lua content at this wiki, grouped by top ...
- SMTP暴力破解
这里实现一个SMTP的暴力破解程序,实验搭建的是postfix服务器,猜解用户名字典(user.txt)和密码字典(password.txt)中匹配的用户名密码对, 程序开发环境是: WinXP VC ...
- 爬虫实战--基于requests 和 Beautiful的7160美图网爬取图片
import requests import os from bs4 import BeautifulSoup import re # 初始地址 all_url = 'http://www.7160. ...
- php常用表单验证类用法实例
<?php /** * 页面作用:常用表单验证类 * 作 者:欣然随风 * QQ:276624915 */ class class_post { //验证是否为指定长度的字母/数字组合 func ...
- 浅析busybox如何集成到openwrt
背景 近日添加了一个包到openwrt中,在此过程中又对openwrt多了一些认识 这个包本身自带了kconfig,可直接在这个包里面执行make menuconfig进行配置,然后执行make 但要 ...