毛毛虫

题目链接

大致题意:

总结来说,给出一棵树,让你求出一条链,使得这条链上的点和与这条链直接相连的点的总点数最大

输出最大的总点数


解题思路:

树形dp (树的最长直径的扩展)

不难发现,每一个结点对答案的贡献是该结点的度数减一

那么我们可以把每个点的贡献值当为该点的权值,题目就可以转化为求一条权值和最大的链

定义状态方程:f[i]表示以i为起点,一条权值和最大的链

显然,我们不知道以哪个点位起点最优,不妨以1号点为起点,跑一遍dp,求出1号点权值和最大的一条链,记录

尾节点为x,我们就可以确定x是答案的一个端点,然后在以x为起点,跑一遍dp,答案就求出来了

需要注意的是最后求出的答案会比样例少2,这是因为当我们算贡献时,每个点的度数减一,起点和终点这两个点也减去了,所以最后答案加2即可


AC代码:

#include <bits/stdc++.h>using namespace std;const int N = 3e5 + 10;int n, m;
int f[N];//表示以i为起点,一条权值和最大的链
vector<int>e[N];
int res, x;
int du[N];void dfs(int u, int fa, int sum) {if (sum > res) {res = sum; x = u;}for (auto& v : e[u]) {if (v == fa)continue;dfs(v, u, sum + du[v]);}
}int main(void)
{scanf("%d%d", &n, &m);if (n == 1) exit((puts("1"), 0)); //特判一个点的情况for (int i = 1; i < n; ++i) {int a, b; scanf("%d%d", &a, &b);e[a].push_back(b);e[b].push_back(a);du[a]++, du[b]++;}for (int i = 1; i <= n; ++i) du[i]--;dfs(1, -1, du[1]);res = 0;dfs(x, -1, du[x]);cout << res + 2 << endl;return 0;
}

[洛谷] P3174 [HAOI2009]毛毛虫 (树形dp 树的最长直径的扩展)相关推荐

  1. P3174 [HAOI2009]毛毛虫(树形dp)

    P3174 [HAOI2009]毛毛虫 题目描述 对于一棵树,我们可以将某条链和与该链相连的边抽出来,看上去就象成一个毛毛虫,点数越多,毛毛虫就越大.例如下图左边的树(图 1 )抽出一部分就变成了右边 ...

  2. 洛谷4895 BZOJ3162 独钓寒江雪 树形dp 树哈希

    题目链接 题意: 给定一棵无根树,求其中本质不同的独立集的个数.独立集就是一个集合中的点之间都没有边直接相连.n<=5e5n<=5e5n<=5e5,对1e9+71e9+71e9+7取 ...

  3. 洛谷 P1272 重建道路(树形DP)

    P1272 重建道路 题目描述 一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了农夫John的牧场.由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是惟 ...

  4. 洛谷P3360偷天换日(树形DP)

    题目背景 神偷对艺术馆内的名画垂涎欲滴准备大捞一把. 题目描述 艺术馆由若干个展览厅和若干条走廊组成.每一条走廊的尽头不是通向一个展览厅,就 是分为两个走廊.每个展览厅内都有若干幅画,每副画都有一个价 ...

  5. 洛谷2014 选课(树形DP)树形背包问题

    题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分,每门课有一 ...

  6. 洛谷P2016 战略游戏 - 树形DP

    一.题目 战略游戏 二.分析 dp1[i] : 第i个节点站士兵,照亮以i为节点的子树所需最少的士兵数: dp0[i] : 第i个节点不站士兵,照亮以i为节点的子树所需最少的士兵数: 状态转移方程: ...

  7. 树形DP+树状数组 HDU 5877 Weak Pair

    1 //树形DP+树状数组 HDU 5877 Weak Pair 2 // 思路:用树状数组每次加k/a[i],每个节点ans+=Sum(a[i]) 表示每次加大于等于a[i]的值 3 // 这道题要 ...

  8. 洛谷 P3373 【模板】线段树 2 题解

    洛谷 P3373 [模板]线段树 2 题解 题面 题目链接:[戳这里](https://www.luogu.org/problemnew/show/P3373) 题目描述 输入输出格式 输入输出样例 ...

  9. 信息学奥赛一本通 1365:FBI树(fbi) | 1928:【04NOIP普及组】FBI树 | 洛谷 P1087 [NOIP2004 普及组] FBI 树

    [题目链接] ybt 1365:FBI树(fbi) ybt 1928:[04NOIP普及组]FBI树 洛谷 P1087 [NOIP2004 普及组] FBI 树 [题目考点] 1. 二叉树 [解题思路 ...

  10. POJ - 4045 Power Station(树形dp/树的重心)

    题目链接:点击查看 题目大意:给出一个n个节点的树,我们需要选出一个节点,到其余任何节点的距离和最小 题目分析:这个题我的第一反应是用树的重心,先求出来符合条件的点,然后再跑一遍dfs求距离,最后输出 ...

最新文章

  1. 从哪些方面可以选出优质的香港服务器?
  2. WebStorm添加多个项目到当前工程目录
  3. Tool之ping:如何使用ping命令检测电脑网络故障图文教程
  4. 游戏外挂的基本编写原理
  5. DataGridView 添加ComboBox
  6. npm run build 打包 之后怎么用_npm 组件你应该知道的事
  7. MATLAB拉格朗日插值
  8. [html] 你有使用过del标签吗?说说它的用途
  9. TensorFlow 2.0开发者预览版放出!上手尝鲜可以开始了
  10. SMP IRQ affinity
  11. 小弟浅谈asp.net页面生成周期---上
  12. Hadoop组件启动的三种方式及配置SSH无密码登入
  13. JavaScript成都市地图网页代码
  14. OpenGL编程指南学习 之一 源码环境运行
  15. service worker使用
  16. 代码 比较工具 在线
  17. useCallback 的问题和隐患的解决方案 - 胡耀(字节跳动)
  18. vue 之 ele动态删除dom节点
  19. 如何看待程序员的薪资倒挂现象
  20. 电路布线-----问题详解

热门文章

  1. 天空的颜色 454
  2. c++入门 简单语句 空语句 作用域和块 复合语句
  3. OpenSSL密码库算法笔记——第 3.2.2章 利用Barrett约化实现
  4. 上次来杭州,已经六年了。。
  5. 计算机键盘的基本操作知识,详细介绍键盘及指法操作
  6. 3行代码实现单片机AD采样功能
  7. 毒液组学-多组学关联分析大全
  8. java cmyk转rgb_Java实现把cmyk格式图片转换为RGB格式图片
  9. 计算机各个硬盘分区名称不见了,开机后电脑硬盘分区突然消失了,文件都不见了还能找回吗?...
  10. 10个您不想错过的最佳网页设计软件