Decorate Apple Tree

题面翻译

题目大意

给你一个nnn个结点以111为根的树,给这nnn个结点任意染色,定义一个点为快乐结点当且仅当这个结点的子树上所有点颜色均不相同。求出对于1∼n1\sim n1∼n中的每一个kkk,快乐结点数大于等于kkk所需要的最少颜色数。

输入格式

第一行一个数n(1≤n≤105)n(1\le n\le 10^5)n(1≤n≤105),表示结点数量

第二行n−1n-1n−1个数pip_ipi​,表示第iii个结点的父亲结点(1≤pi<i)(1\le p_i<i)(1≤pi​<i)

输出格式

一行,nnn个数,表示对于1∼n1\sim n1∼n中的每一个kkk,快乐节点数大于等于kkk时所需的最少颜色数

样例 #1

样例输入 #1

3
1 1

样例输出 #1

1 1 2

样例 #2

样例输入 #2

5
1 1 3 3

样例输出 #2

1 1 1 2 3

想不到,注意到了给定的树有多少个叶子节点就输出多少个1,最后一个数是以1为根的子树的叶子节点的最大值,然后就想不到了。

题解说,问题可以转换为以每个点为根的子树有多少叶子节点,排序就是答案。

搞不懂,知道看了别人的解释

给一棵树,能给叶子染不同的颜色,定义一个节点为happy当且仅当该子树叶子节点(可包括本身)的颜色各不相同,然后求分别有1到n个happy节点的情况下的最小颜色数
反过来想,先考虑n的情况,要n个happy节点,那就是所有叶子都染不同颜色,然后考虑n-1的情况,就去掉一个根节点,那么就变成两棵独立的子树,那只要保证那个叶子节点多的那个子树的叶子染不同的颜色即可,另外的兄弟子树的叶子不管染什么色肯定不会超过这一棵的颜色数,所以其实就是第二大的叶子数的子树,所以答案就是dfs一遍预处理出每个节点对应的子树的叶子节点数,排序输出即可

(想到的一个问题)如何求1 ~ n 中以每个点为根的最大子树的节点个数。挖坑未填


如何用带以int 作为返回值的dfs求以u为根的子树有多少叶节点?

完全等价的两种写法,我一直感觉不带返回值的要比带返回值的好写。
int dfs(int u,int fa){bool flag = 1;for(int i=h[u];i!=-1;i=ne[i]){int j = e[i];if(e[i]==fa)continue;flag = 0;cnt[u] += dfs(j,u);}if(flag){cnt[u] = 1;}return cnt[u];
}void dfs(int u,int fa){bool flag = 1;for(int i=h[u];i!=-1;i=ne[i]){int j = e[i];if(e[i]==fa)continue;flag = 0;dfs(j,u);cnt[u]+=cnt[e[i]];}if(flag){cnt[u] = 1;}
}

Decorate Apple Tree相关推荐

  1. Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈)

    Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈) 标签: codeforces 2017-06-02 11:41 29人阅读 ...

  2. 【POJ - 2486】Apple Tree (树形背包,dp)

    题干: Wshxzt is a lovely girl. She likes apple very much. One day HX takes her to an apple tree. There ...

  3. 【POJ - 3321】 Apple Tree(dfs序 + 线段树维护 或 dfs序 + 树状数组维护)

    题干: There is an apple tree outside of kaka's house. Every autumn, a lot of apples will grow in the t ...

  4. 【HDU 4925】BUPT 2015 newbie practice #2 div2-C-HDU 4925 Apple Tree

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=102419#problem/C Description I've bought an or ...

  5. Apple Tree树状数组、前向星、DFS序(C语言)

    Apple Tree树状数组.前向星.DFS序(C语言) 题目 输入值 第一行包含一个整数Ñ(Ñ ≤100,000),这是树中的叉的数量. 接下来的N -1行分别包含两个整数u和v,这意味着fork ...

  6. 【线段树_DFS序】POJ 3321 Apple Tree

    POJ 3321 Apple Tree 题意:给出一个N个结点的无根树.但是要将1看作根,也相当于是一个有根树.最初每个结点都有一个苹果.有两种操作,Q x: 以x为根的子树上有多少个苹果:C x: ...

  7. Binary Apple Tree

    Let's imagine how apple tree looks in binary computer world. You're right, it looks just like a bina ...

  8. Apple Tree(dfs序+树状数组)

    题目(传送门poj3321) Apple Tree Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 40714 Accepted: ...

  9. (树形dp)Binary Apple Tree

    Let's imagine how apple tree looks in binary computer world. You're right, it looks just like a bina ...

  10. POJ 3321 Apple Tree【树状数组】

    题目 There is an apple tree outside of kaka's house. Every autumn, a lot of apples will grow in the tr ...

最新文章

  1. oracle fra空间不足,ORACLE 基础解决方案1_扩大FRA区
  2. 关于c++中的Debug以及runtime_error之segment_fault
  3. Android 开发有什么好的架构么?
  4. log nginx 客户端请求大小_nginx
  5. vue - blog开发学7
  6. 好的程序员就应该有强迫症
  7. sql limit 子句_SQL Join子句介绍和概述
  8. 24个坏行为让你身体越来越丑
  9. Promise实现图片预加载
  10. python:可变参数与apply
  11. NiFi+Kylo安装部署
  12. android打开xlsx文件,如何在Android中打开.xlsx文件?
  13. Channel~scatter and gather
  14. 国务院办公厅公布2011年部分节假日安排通知
  15. 微博+java平台_【基于JavaEE的微博平台设计最终版材料】
  16. STM32操控外设为什么要先使能时钟
  17. python turtle画表情包
  18. 外卖CPS小程序推广系统外卖侠探探外卖优惠券源码开后台及搭建一条龙
  19. CEF 进程间消息传递
  20. 昭阳E47G开机问题

热门文章

  1. Java面试题(一)
  2. 生产计划排产的十二个应用场景
  3. SVN分支/主干Merge操作小记
  4. Team Tic Tac Toe 题解
  5. 转帖 -- 仙4语录
  6. 最值得看的电影,一生必看的50部电影,您看过几部影
  7. PHP 手机验证码登录
  8. python常用marker
  9. OAI配置eNB时error解决
  10. 将中文汉字转换成拼音