[luogu2585 ZJOI2006] 三色二叉树 (树形dp)
Description

Input
输入文件名:TRO.IN
输入文件仅有一行,不超过500000个字符,表示一个二叉树序列。
Output
输出文件名:TRO.OUT
输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色。
Sample Input
1122002010
Sample Output
5 2
Code:
//By Menteur_Hxy
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ls nd[x][0]
#define rs nd[x][1]
#define F(i,a,b) for(register int i=(a);i<=(b);i++)
using namespace std;
const int N=500010;
int tot=1;
int nd[N][2],f[N][3],g[N][3];
void build(int x) {
    char c=getchar();
    if(c=='1'||c=='2') nd[x][0]=++tot,build(tot);
    if(c=='2') nd[x][1]=++tot,build(tot);
    if(c=='0') f[x][2]=g[x][2]=1;
}
void dfs(int x) {
    if(ls) {
        dfs(ls);
        if(rs) {
            dfs(rs);
            f[x][0]=min(f[ls][1]+f[rs][2],f[ls][2]+f[rs][1]);
            f[x][1]=min(f[ls][0]+f[rs][2],f[ls][2]+f[rs][0]);
            f[x][2]=min(f[ls][0]+f[rs][1]+1,f[ls][1]+f[rs][0]+1);
            g[x][0]=max(g[ls][1]+g[rs][2],g[ls][2]+g[rs][1]);
            g[x][1]=max(g[ls][0]+g[rs][2],g[ls][2]+g[rs][0]);
            g[x][2]=max(g[ls][0]+g[rs][1]+1,g[ls][1]+g[rs][0]+1);
        } else {
            f[x][0]=min(f[ls][1],f[ls][2]);
            f[x][1]=min(f[ls][0],f[ls][2]);
            f[x][2]=min(f[ls][0],f[ls][1])+1;
            g[x][0]=max(g[ls][1],g[ls][2]);
            g[x][1]=max(g[ls][0],g[ls][2]);
            g[x][2]=max(g[ls][0],g[ls][1])+1;
        }
    }
}
int main() {
    build(1);
    dfs(1);
    int maxn=max(g[1][0],max(g[1][1],g[1][2]));
    int minn=min(f[1][0],min(f[1][1],f[1][2]));
    printf("%d %d",maxn,minn);
    return 0;
}
PS:写几道简单的树形dp qwq
[luogu2585 ZJOI2006] 三色二叉树 (树形dp)的更多相关文章
- 【BZOJ1864】[Zjoi2006]三色二叉树 树形DP
		1864: [Zjoi2006]三色二叉树 Description Input 仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次表示最多和最 ... 
- BZOJ1864[ZJOI2006]三色二叉树[树形DP]
		1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 773 Solved: 548[Submit][Status] ... 
- BZOJ 1864: [Zjoi2006]三色二叉树( 树形dp )
		难得的ZJOI水题...DFS一遍就行了... ----------------------------------------------------------------------- #inc ... 
- 洛谷 2585 [ZJOI2006]三色二叉树——树形dp
		题目:https://www.luogu.org/problemnew/show/P2585 可以把不是绿色的记成一种.仔细一想不会有冲突.如果自己是绿色,孩子的不同颜色不会冲突:如果自己不是绿色,自 ... 
- BZOJ 1864: [Zjoi2006]三色二叉树 树形DP + 读入
		Description Input 仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色. 题解:本题大水 ... 
- 【BZOJ-1864】三色二叉树     树形DP
		1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 659 Solved: 469[Submit][Status] ... 
- 三色二叉树——树形dp
		三色二叉树 题目描述 一棵二叉树可以按照如下规则表示成一个由 \(0.1.2\) 组成的字符序列,我们称之为"二叉树序列 \(S\) ": \(0\) 该树没有子节点. \(1S_ ... 
- 洛谷 P2585 [ ZJOI 2006 ] 三色二叉树 —— 树形DP
		题目:https://www.luogu.org/problemnew/show/P2585 首先,三色其实记录两种状态:是绿色,不是绿色 即可,因为红蓝可以随意取反: 一开始因为懒得还原出树,所以写 ... 
- BZOJ_1864_[Zjoi2006]三色二叉树_树形DP
		BZOJ_1864_[Zjoi2006]三色二叉树_树形DP 题意: 分析:递归建树,然后DP,从子节点转移. 注意到红色和蓝色没有区别,因为我们可以将红蓝互换而方案是相同的.这样的话我们只需要知道当 ... 
随机推荐
- [bzoj1001][BeiJing2006]狼抓兔子_网络流_最小割转对偶图
			狼抓兔子 bzoj-1001 BeiJing2006 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还 ... 
- HDU 4535
			裸 的错排.... #include <iostream> #include <cstdio> #include <cstring> #include <al ... 
- POJ1151 Atlantis 【扫描线】
			Atlantis Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16882 Accepted: 6435 Descrip ... 
- "高可用方案工具包" high availability toolkit 1.1
			"高可用方案工具包" high availability toolkit 1.1 公布了. version 1.1 新增了gossip protocol 的高可用HA方案应用. 项 ... 
- cxf调用WebService
			一.用CXF调用WebService的几种方式,参考: http://cxf.apache.org/docs/how-do-i-develop-a-client.html 二.JaxWsProxyFa ... 
- 框架:Rureka
			ylbtech-框架:Rureka Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的.S ... 
- 在linux上加速git clone
			在linux上加速git clone 进入终端命令行模式,sudo vim /etc/hosts 编辑hosts文件,添加以下ip-域名,保存退出 151.101.44.249 github.glob ... 
- Qt5.9 WebChannel
			Qt WebChannel enables peer-to-peer communication between a server (QML/C++ application) and a client ... 
- 初探.net framework 下的异步多线程
			初探.net framework 下的异步多线程 目录 1.多线程的出现条件 2.Thread和ThreadPool的相关Api及用法 3.Task和Parallel的相关Api及用法 4.Async ... 
- Fabric quickly
			环境很重要.环境很重要.环境很重要 # CentOS 7 $ setenforce 0 # 可以设置配置文件永久关闭 $ systemctl stop iptables.service $ syste ... 
