链接:https://www.nowcoder.com/acm/contest/136/C
来源:牛客网

题目描述

桃花一簇开无主,可爱深红映浅红。

                                        ——《题百叶桃花》

桃花长在桃树上,树的每个节点有一个桃花,调皮的HtBest想摘尽可能多的桃花。HtBest有一个魔法棒,摘到树上任意一条链上的所有桃花,由于HtBest法力有限,只能使用一次魔法棒,请求出Htbest最多可以摘到多少个桃花。

输入描述:

  1. 第一行有一个正整数n,表示桃树的节点个数。
    接下来n-1行,第i行两个正整数a

i

  1. ,b

i

  1. ,表示桃树上的节点a

i

  1. ,b

i

  1. 之间有一条边。

输出描述:

  1. 第一行一个整数,表示HtBest使用一次魔法棒最多可以摘到多少桃花。

输入例子:
  1. 3
  2. 1 2
  3. 2 3
输出例子:
  1. 3

-->

示例1

输入

复制

  1. 3
  2. 1 2
  3. 2 3

输出

复制

  1. 3
示例2

输入

复制

  1. 3
  2. 1 2
  3. 1 3

输出

复制

  1. 3
示例3

输入

复制

  1. 4
  2. 1 2
  3. 2 3
  4. 3 4

输出

复制

  1. 4

备注:

  1. 对于100%的测试数据:
    1 n 1000000
    数据量较大,注意使用更快的输入输出方式。
  2.  
  3. 分析:
      求树上最长子链(最长直径)
      记录树上任意一结点到子树最远结点的最长距离和到父结点的最长距离
    类似hdu2196
    https://blog.csdn.net/qq_37493070/article/details/81285249
    AC代码:
  1. #include <map>
  2. #include <set>
  3. #include <stack>
  4. #include <cmath>
  5. #include <queue>
  6. #include <cstdio>
  7. #include <vector>
  8. #include <string>
  9. #include <bitset>
  10. #include <cstring>
  11. #include <iomanip>
  12. #include <iostream>
  13. #include <algorithm>
  14. #define ls (r<<1)
  15. #define rs (r<<1|1)
  16. #define debug(a) cout << #a << " " << a << endl
  17. using namespace std;
  18. typedef long long ll;
  19. const ll maxn = 1e6+10;
  20. const ll mod = 1e9+7;
  21. const double pi = acos(-1.0);
  22. const double eps = 1e-8;
  23. vector<ll> e[maxn];
  24. ll ans[maxn], cnt[maxn], n;
  25. void dfs( ll x, ll fa ) {
  26. ans[x] = cnt[x] = 1;
  27. for( ll v : e[x] ) {
  28. if( v == fa ) {
  29. continue;
  30. }
  31. dfs( v, x );
  32. ans[x] = max( ans[x], max( ans[v], cnt[x]+cnt[v] ) ); //子树最长
  33. cnt[x] = max( cnt[x], cnt[v]+1 ); //结点到父结点最长
  34. }
  35. }
  36. int main() {
  37. ios::sync_with_stdio(0);
  38. cin >> n;
  39. for( ll i = 0, x, y; i < n-1; i ++ ) {
  40. cin >> x >> y;
  41. e[x].push_back(y), e[y].push_back(x);
  42. }
  43. dfs(1,0);
  44. cout << ans[1] << endl;
  45. return 0;
  46. }

  

牛客小白月赛6 C 桃花 dfs 求树上最长直径的更多相关文章

  1. 牛客小白月赛6C-桃花(DFS/BFS求树的直径)

    链接:https://www.nowcoder.com/acm/contest/136/C 来源:牛客网 桃花 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言 ...

  2. 牛客小白月赛12 H(dfs序+线段树),F(分块思想+bit),J(二分)

    H 华华和月月种树 链接:https://ac.nowcoder.com/acm/contest/392/H 思路:先得到整棵树最终的形态,在这棵树上进行三种操作,用dfs跑下,第二种操作就直接对最终 ...

  3. 牛客小白月赛12 I (tarjan求割边)

    题目链接:https://ac.nowcoder.com/acm/contest/392/I 题目大意:一个含有n个顶点m条边的图,求经过所有顶点必须要经过的边数. 例: 输入: 5 51 22 33 ...

  4. 牛客小白月赛5-I-区间(差分求前缀和+一次暴力统计)

    题目描述 Apojacsleam喜欢数组. 他现在有一个n个元素的数组a,而他要对a[L]-a[R]进行M次操作: 操作一:将a[L]-a[R]内的元素都加上P 操作二:将a[L]-a[R]内的元素都 ...

  5. 树的最长链-POJ 1985 树的直径(最长链)+牛客小白月赛6-桃花

    求树直径的方法在此转载一下大佬们的分析: 可以随便选择一个点开始进行bfs或者dfs,从而找到离该点最远的那个点(可以证明,离树上任意一点最远的点一定是树的某条直径的两端点之一:树的直径:树上的最长简 ...

  6. 牛客网 牛客小白月赛5 I.区间 (interval)-线段树 or 差分数组?

    牛客小白月赛5 I.区间 (interval) 休闲的时候写的,但是写的心情有点挫,都是完全版线段树,我的一个队友直接就水过去了,为啥我的就超内存呢??? 试了一晚上,找出来了,多初始化了add标记数 ...

  7. 牛客小白月赛8 - E - 诡异数字 数位DP

    牛客小白月赛8 - E - 诡异数字 题意: 求区间中,满足限制条件的数字的个数. 限制条件就是某些数字不能连续出现几次. 思路: 比较裸的数位DP, DP数组开一个dp[len][x][cnt] 表 ...

  8. 牛客小白月赛18 Forsaken给学生分组

    牛客小白月赛18 Forsaken给学生分组 Forsaken给学生分组 链接:https://ac.nowcoder.com/acm/contest/1221/C来源:牛客网 ​ Forsaken有 ...

  9. 牛客小白月赛18 Forsaken喜欢数论

    牛客小白月赛18 Forsaken喜欢数论 题目传送门直接点标题 ​ Forsaken有一个有趣的数论函数.对于任意一个数xxx,f(x)f(x)f(x)会返回xxx的最小质因子.如果这个数没有最小质 ...

随机推荐

  1. 使用阿里云对docker拉取镜像加速

    使用docker的时候,总是需要去search镜像,使用国外的源下载太慢,还有诸多的限制,无意中发现可以使用阿里云进行加速,实测有用,废话少说,操作如下: 1.打开阿里云控制台,没有的可以用淘宝账号或 ...

  2. CEPH 对象存储的系统池介绍

    RGW抽象来看就是基于rados集群之上的一个rados-client实例. Object和pool简述 Rados集群网上介绍的文章很多,这里就不一一叙述,主要要说明的是object和pool.在r ...

  3. 作为前端的你,CC游戏开发可以上车

    1. 初来乍到 打开 Cocos Creator 点击新建空白项目,在默认布局的左下区域,一个黄黄assets文件夹映入眼帘.作为前端的你对这个文件是不是再熟悉不过了.是的,和你想象的一样,开发游戏中 ...

  4. NS3中一些难以理解的常数

    摘要:在NS3的学习中,PHY MAC中总有一些常数,需要理解才能修改.如帧间间隔等.那么,本文做个简单分析,帮助大家理解.针对802.11标准中MAC协议.   void WifiMac::Conf ...

  5. S3 Select for Java 使用记录

    背景 后台基本使用 Amazon 的全家桶(EC2.DynamoDB.S3.Step Fuction 等等)构建.现在需要根据访问者的 IP 确定访问者的国家或地区. 已知: 访问者 IP 一个 ip ...

  6. Linux lsof工具介绍

    引言 在<Linux fuser工具介绍>一文中,与大家一起学习了fuser工具的使用方法."lsof"——list open files,lsof也是Linux下用于 ...

  7. Linux--shell编程原理--03

    一.编程原理: 1.编程介绍: 计算机只能识别二进制指令 程序=指令+数据 根据服务的重心不同,我们分为面向过程编程,面向对象编程: a) 面向过程:侧重于指令的编程语言 b) 面向对象:侧重于数据的 ...

  8. echarts legend 限制规定显示个数,显示省略号,修改默认样式

    类似百度统计,有的时候legend的个数比较多,但是前端需要控制初始化显示的个数,以及最多显示的条数,先看效果图: 先给代码: <!DOCTYPE html> <html lang= ...

  9. 弹性盒子---CSS3布局方式

    1.弹性盒子/伸缩盒子 如果要使用弹性盒子属性,首先要将父级元素变成弹性盒子 Flex-direction 设置伸缩盒子的内部元素的排列方式 Row    从左到右安行排列 Column  从上到下按 ...

  10. cs231n---生成模型

    1 生成模型的定义和分类 生成模型是一种无监督学习方法.其定义是给一堆由真实分布产生的训练数据,我们的模型从中学习,然后以近似于真实的分布来产生新样本. 生成模型分为显式和隐式的生成模型: 为什么生成 ...