P2585 [ZJOI2006]三色二叉树
题目描述

输入输出格式
输入格式:
输入文件名:TRO.IN
输入文件仅有一行,不超过500000个字符,表示一个二叉树序列。
输出格式:
输出文件名:TRO.OUT
输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色。
输入输出样例
1122002010
5 2
树形dp
可以发现,只要不是绿色,红色或蓝色对于答案是没有影响的。
所以题目变成:在一棵二叉树上,每个有两个儿子的节点和他的2个儿子中一定要有一个绿色节点切相邻的两个节点不能同时是绿色时求绿色节点数量的最大值和最小值。
然后就是基础的树形dp啦!要注意的是这道题的建图需要一定的技巧。
#include<iostream>
#include<stdio.h>
#include<cstring>
using namespace std; int i,m,n,j,k,a[][],f[],son[][],d[]; int dfs(int x,int fa)
{
scanf("%1ld",&d[x]);
f[x]=fa;
if(fa)
{
if(son[fa][]) son[fa][]=x;
else son[fa][]=x;
}
if(d[x]==) return x;
if(d[x]==) return dfs(dfs(x+,x)+,x);
return dfs(x+,x);
} void ddfs(int x)
{
if(!x) return;
if(!d[x])
{
a[x][]=a[x][]=;
return;
}
ddfs(son[x][]); ddfs(son[x][]);
a[x][]=max(a[son[x][]][]+a[son[x][]][],a[son[x][]][]+a[son[x][]][]);
a[x][]=+a[son[x][]][]+a[son[x][]][];
a[x][]=min(a[son[x][]][]+a[son[x][]][],a[son[x][]][]+a[son[x][]][]);
a[x][]=+a[son[x][]][]+a[son[x][]][];
} int main()
{
dfs(,);
ddfs();
printf("%d %d",max(a[][],a[][]),min(a[][],a[][]));
}
P2585 [ZJOI2006]三色二叉树的更多相关文章
- luogu P2585 [ZJOI2006]三色二叉树
P2585 [ZJOI2006]三色二叉树 题目描述 输入输出格式 输入格式: 输入文件名:TRO.IN 输入文件仅有一行,不超过10000个字符,表示一个二叉树序列. 输出格式: 输出文件名:TRO ...
- 【树形DP】洛谷P2585 [ZJOI2006] 三色二叉树
[树形DP]三色二叉树 标签(空格分隔): 树形DP [题目] 一棵二叉树可以按照如下规则表示成一个由0.1.2组成的字符序列,我们称之为"二叉树序列S": 0 该树没有子节点 1 ...
- 洛谷P2585 [ZJOI2006]三色二叉树
题目描述 输入输出格式 输入格式: 输入文件名:TRO.IN 输入文件仅有一行,不超过10000个字符,表示一个二叉树序列. 输出格式: 输出文件名:TRO.OUT 输出文件也只有一行,包含两个数,依 ...
- 洛谷P2585 [ZJOI2006]三色二叉树(树形dp)
传送门 设$dp[u][i]$表示点$u$颜色为$i$时最多(最少)的绿点个数(这里用$0$表示绿点) 然后直接用树形dp就可以了 记得把情况讨论清楚 //minamoto #include<b ...
- 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 输出文件也只有一行,包含两个数,依次表示最多和最 ...
- BZOJ 1864: [Zjoi2006]三色二叉树( 树形dp )
难得的ZJOI水题...DFS一遍就行了... ----------------------------------------------------------------------- #inc ...
- BZOJ_1864_[Zjoi2006]三色二叉树_树形DP
BZOJ_1864_[Zjoi2006]三色二叉树_树形DP 题意: 分析:递归建树,然后DP,从子节点转移. 注意到红色和蓝色没有区别,因为我们可以将红蓝互换而方案是相同的.这样的话我们只需要知道当 ...
- bzoj千题计划212:bzoj1864: [Zjoi2006]三色二叉树
http://www.lydsy.com/JudgeOnline/problem.php?id=1864 #include<cstdio> #include<cstring> ...
随机推荐
- linux中find与rm实现查找并删除文件
find命令: find . -name '*.log' #查找当前目录下的log文件 查找并删除: find . -name '*.log' -type f -print -exec rm -rf ...
- JAVA基础之——JDK包分析concurrent
concurrent在哪儿:jdk\jre\lib\rt.jar package java.util.concurrent; 本文从特性.分类.扩展方面一一道来. 1 特性 包中包含大量有用的构建块, ...
- mybatis必知必会一
入门: 1.每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的.SqlSessionFactory 的实例可以通过 SqlSessionFactoryBui ...
- groovy运算符
import java.util.regex.Matcher /** * Created by Jxy on 2018/12/20 10:29 * groovy运算符 */ /*class opera ...
- golang 编码转化
在网上搜索golang编码转化时,我们经常看到的文章是使用下面一些第三方库: https://github.com/djimenez/iconv-go https://github.com/qiniu ...
- fuzhou 1683 纪念SlingShot ***
Problem 1683 纪念SlingShot Accept: 361 Submit: 1287Time Limit: 1000 mSec Memory Limit : 32768 KB ...
- linux ubuntu 安装nginx
参考原文 在Ubuntu下安装Nginx有以下方法,但是如果想要安装最新版本的就必须下载源码包编译安装. 一.基于APT源安装 sudo apt-get install nginx 安装好的文件位置: ...
- csharp: Microsoft SqlHelper
from: Microsoft Data Access Application Block for .NET https://www.microsoft.com/en-us/download/con ...
- python查看当前路径
1.os模块 import os print os.getcwd() #获取当前工作目录路径 print os.path.abspath('.') #获取当前工作目录路径 print os.path. ...
- 整理一下最近Android面试的提问
java相关: 1. public protect private default关键字有什么区别? public:表示可以在任何一个类中被访问: protect:表示可以在自身.子类以及同一包下的类 ...