题目:https://www.luogu.org/problemnew/show/P2585

可以把不是绿色的记成一种。仔细一想不会有冲突。如果自己是绿色,孩子的不同颜色不会冲突;如果自己不是绿色,自己的不是绿色的孩子对于自己就像二分图一样的感觉,所以总有方案使得不区分另外两种颜色也不会有冲突。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=5e5+5;
int n,rt,tot,ls[N],rs[N],dp[N][2][2],p0;//是/否绿 最大/小
char ch[N];
void build(int &cr,int dep)
{cr=++tot;if(ch[p0]=='0')p0++;else if(ch[p0]=='1')p0++,build(ls[cr],dep+1);elsep0++,build(ls[cr],dep+1),build(rs[cr],dep+1);
}
void dfs(int cr)
{if(!ls[cr]){dp[cr][0][0]=dp[cr][0][1]=1;dp[cr][1][0]=dp[cr][1][1]=0;return;}else if(!rs[cr]){int v=ls[cr]; dfs(v);dp[cr][0][0]=dp[v][1][0]+1;dp[cr][0][1]=dp[v][1][1]+1;dp[cr][1][0]=max(dp[v][0][0],dp[v][1][0]);dp[cr][1][1]=min(dp[v][0][1],dp[v][1][1]);}else{int Ls=ls[cr],Rs=rs[cr];dfs(Ls); dfs(Rs);dp[cr][0][0]=dp[Ls][1][0]+dp[Rs][1][0]+1;dp[cr][0][1]=dp[Ls][1][1]+dp[Rs][1][1]+1;dp[cr][1][0]=max(dp[Ls][0][0]+dp[Rs][1][0],dp[Ls][1][0]+dp[Rs][0][0]);dp[cr][1][1]=min(dp[Ls][0][1]+dp[Rs][1][1],dp[Ls][1][1]+dp[Rs][0][1]);}
}
int main()
{//freopen("TRO.IN","r",stdin);//freopen("TRO.OUT","w",stdout);scanf("%s",ch);n=strlen(ch);build(rt,1);dfs(rt);printf("%d %d\n",max(dp[rt][0][0],dp[rt][1][0]),min(dp[rt][0][1],dp[rt][1][1]));return 0;
}

转载于:https://www.cnblogs.com/Narh/p/9676480.html

洛谷 2585 [ZJOI2006]三色二叉树——树形dp相关推荐

  1. 洛谷P2585[ZJOI2006]三色二叉树(树形DP)

    思路 树形DP,首先是递归建树,然后是DP状态方程转移. 代码 #include<cstdio> #include<cstring> #include<algorithm ...

  2. 洛谷P2585 [ZJOI2006]三色二叉树

    题目描述 输入输出格式 输入格式: 输入文件名:TRO.IN 输入文件仅有一行,不超过10000个字符,表示一个二叉树序列. 输出格式: 输出文件名:TRO.OUT 输出文件也只有一行,包含两个数,依 ...

  3. 【BZOJ-1864】三色二叉树 树形DP

    1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 659  Solved: 469 [Submit][Statu ...

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

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

  5. [洛谷 P4084 USACO17DEC] Barn Painting G (树形dp经典)

    [洛谷 P4084 USACO17DEC] Barn Painting G 题目链接 大致题意: 给定一颗N个节点组成的树,3种颜色,其中K个节点已染色,要求任意两相邻节点颜色不同,求合法染色方案数 ...

  6. 【洛谷P4084】Barn Painting【树形DP】

    题目大意: 题目链接:https://www.luogu.org/problemnew/show/P4084 一棵nnn个节点的树上有kkk个点已被染色.求将这棵树染成三种颜色且相邻的节点颜色不同的方 ...

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

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

  8. bzoj 1864: [Zjoi2006]三色二叉树

    Description solution 正解:递归+树型DP 我们首先递归建树 然后考虑树型DP,我们设绿色的节点为Y,非绿色为N 我们神奇的发现:N会形成是很多条相互独立的链 也就是说 Y 的下发 ...

  9. 洛谷 P1352 没有上司的舞会(树形 DP)

    题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri, ...

最新文章

  1. 【Qt】Qt5.x移植后的环境配置(imx6)
  2. linux carry php Soap 扩展
  3. 马化腾内部分享:三个问题说透如何做产品
  4. Activity与Thread之间的通讯(old)
  5. mysql基础语法(常用)
  6. python methodtype_Python的实例定属性和方法或类绑定方法
  7. Android逆向笔记-破解自己编写的Android应用程序(开发及破解)
  8. Android开发笔记(四)字符串格式化
  9. Tensor的Broadcasting操作
  10. 网管,真的是我该选择的路吗?
  11. leetcode------Flatten Binary Tree to Linked List
  12. 爱立信、EMC笔试面试
  13. linux拷贝文件夹下所有文件
  14. vmware linux top si高以及网卡队列、软负载相关优化
  15. yigo 第一阶段 异常处理 解决方案
  16. 解决matplotlib不显示图片
  17. Maven下载及目录结构
  18. iOS MP3流媒体播放 边缓冲边播放 FreeStreamer框架
  19. 摘自:《设计心理学3:情感设计》 — 〔美〕唐纳德·A·诺曼(Donald Arthur Norman)
  20. 从python入门开始,玩这个炸弹超人小游戏,打通关就可以掌握编程

热门文章

  1. 自己在windows下第一次安装pygame成功的经历
  2. emplace与insert
  3. c++ 输入输出流  ios::out 和ios::trunc有什么区别
  4. java 存储过程 数组参数_执行数组参数的存储过程
  5. 5G NR 同步过程
  6. Tianlesoftware Oracle 学习 手册 第一版
  7. JAVA字符流与字符集编码
  8. pheonix从入门到进阶
  9. Android(3_2)-----模仿微信界面:通讯录页面
  10. LOJ-10096(强连通+bfs)