【BZOJ】1864: [Zjoi2006]三色二叉树
1864: [Zjoi2006]三色二叉树
Time Limit: 1 Sec Memory Limit: 64 MB
Submit: 1295 Solved: 961
[Submit][Status][Discuss]
Description

Input
仅有一行,不超过500000个字符,表示一个二叉树序列。
Output
输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色。
Sample Input
Sample Output
HINT
Source
其实是一道基础的树规辣~一开始觉得难点可能在建边上,可是建边也很好搞是怎么肥四??(其实就是一道水题
建了边直接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]三色二叉树的更多相关文章
- BZOJ 1864: [Zjoi2006]三色二叉树( 树形dp )
难得的ZJOI水题...DFS一遍就行了... ----------------------------------------------------------------------- #inc ...
- BZOJ 1864: [Zjoi2006]三色二叉树 树形DP + 读入
Description Input 仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色. 题解:本题大水 ...
- 1864: [Zjoi2006]三色二叉树
1864: [Zjoi2006]三色二叉树 链接 分析: 做得最智障的一题了... 首先中间输出两个数之间没空格(换行居然也过了...), 写了dp[i][0/1/2],后来知道其实dp[i][0/1 ...
- 1864. [ZJOI2006]三色二叉树【树形DP】
Description Input 仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色. Sample ...
- bzoj千题计划212:bzoj1864: [Zjoi2006]三色二叉树
http://www.lydsy.com/JudgeOnline/problem.php?id=1864 #include<cstdio> #include<cstring> ...
- BZOJ1864[ZJOI2006]三色二叉树[树形DP]
1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 773 Solved: 548[Submit][Status] ...
- 【BZOJ1864】[Zjoi2006]三色二叉树 树形DP
1864: [Zjoi2006]三色二叉树 Description Input 仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次表示最多和最 ...
- 嘴巴题5 「BZOJ1864」[ZJOI2006] 三色二叉树
1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1195 Solved: 882 [Submit][Status ...
- [ZJOI2006]三色二叉树
[ZJOI2006]三色二叉树 BZOJ luogu 分3种颜色讨论转移一下 #include<bits/stdc++.h> using namespace std; const int ...
随机推荐
- 記一次undo問題
記一次undo問題 參考:http://www.linuxidc.com/Linux/2014-06/103780.htm ORA-00376: 無法於此時讀取檔案 3 ORA-01110: 資料檔 ...
- 诺贝斯特(厦门)电气有限公司http://www.thebest.cn.com/
诺贝斯特(厦门)电气有限公司,公司位于厦门市湖里区塘边社168号.是一家专注于智能电网用户端智能配用电以及电气安全产品研发.生产和销售的高新技术企业:致力于为工矿企业.建筑楼宇以及基础设施等智能电网用 ...
- JDOM生成XML文档的一般方法
由于DOM提供的生成XML的方法不够直观,而且要用到各种繁琐的注解,鉴于此可借助第三方库-----JDOM生成XML文档.具体操作方式如下: import java.io.FileOutputStre ...
- Wannacry样本取证特征与清除
一.取证特征 1)网络域名特征 http://www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com 2)文件特征 母体文件 mssecsvc.exe c: ...
- cocos2dx中调用TinyXml读取xml配置文件 || cocos2d-x 中跨平台tinyxml读取xml文件方式
TiXmlDocument *doc = newTiXmlDocument; #if (CC_TARGET_PLATFORM ==CC_PLATFORM_ANDROID) //Android平台tin ...
- 在VS中让一个JS文件智能提示另一个JS文件中的成员2--具体引用
我们知道,在html中,利用<script language="javascript" type="text/javascript" src=" ...
- IPv4的核心管理功能/proc/sys/net/ipv4/*
I /proc/sys/net/ipv4/tcp_syncookies SYN Cookies模块可以在系统随机端口(1024:65535)即将用完时自动启动,用来应对Dos攻击.当启动SYN Coo ...
- 洛谷P1411 砝码称重
传送门啦 这个题总体思路就是先搜索在 $ dp $ void dfs(int keep,int now){ //使用 放弃 if(now > m) return; //已经放弃超过m个了,就退出 ...
- caffe细节
1.BN层参数设置 在训练时所有BN层要设置use_global_stats: false(也可以不写,caffe默认是false) 在测试时所有BN层要设置use_global_stats: tru ...
- Linux学习笔记:输入输出重定向 >>命令
Linux重定向是指修改原来默认的一些东西,对原来系统命令的默认执行方式进行改变.比如说我不想看到在显示器的输出,而是希望输出到某一文件中就可以通过Linux重定向来进行这项工作. 将stdout重定 ...