传送门

题目描述

链接里面都有我就不说了

分析

首先一个毛毛虫,就是一条主链,外加上主链上所有点所直接连接的点

我们用f[u]表示以u为顶点时形成的最大的毛毛虫,那么我们需要找到和u相连的点v,找到最大的f[v],容易写出状态转移方程
f[u] = f[v] + 1 + max(0,cnt - 1);
cnt是与u直接相连的点
这个状态转移方程应该比较好理解,加上自己这个点,再加上其他没有出现在最大子毛毛虫中的直接相连的点即可

然后只需要维护每一个点作为顶点时产生的最大毛毛虫以及次大毛毛虫即可

代码

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <queue>
#include <cstring>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
const int INF = 0x3f3f3f3f;
const int N = 3000010;
int h[N],e[N * 2],ne[N * 2],idx;
int f[N];
int n,m;
int ans;void add(int x,int y){ne[idx] = h[x],e[idx] = y,h[x] = idx++;
}void dfs(int u,int fa){int max1 = 0,max2 = 0;int cnt = 0;for(int i = h[u];~i;i = ne[i]){int j = e[i];cnt++;if(j == fa) continue;dfs(j,u);f[u] = max(f[u],f[j]);if(f[j] > max1) max2 = max1,max1 = f[j];else if(f[j] > max2) max2 = f[j];}cnt--;f[u] += (1 + max(0,cnt - 1));ans = max(ans,f[u] + max2);
}int main(){memset(h,-1,sizeof h);scanf("%d%d",&n,&m);while(m--){int x,y;scanf("%d%d",&x,&y);add(x,y),add(y,x);}dfs(1,-1);printf("%d\n",max(ans,1));return 0;
}/**
*  ┏┓   ┏┓+ +
* ┏┛┻━━━┛┻┓ + +
* ┃       ┃
* ┃   ━   ┃ ++ + + +
*  ████━████+
*  ◥██◤ ◥██◤ +
* ┃   ┻   ┃
* ┃       ┃ + +
* ┗━┓   ┏━┛
*   ┃   ┃ + + + +Code is far away from  
*   ┃   ┃ + bug with the animal protecting
*   ┃    ┗━━━┓ 神兽保佑,代码无bug 
*   ┃        ┣┓
*    ┃        ┏┛
*     ┗┓┓┏━┳┓┏┛ + + + +
*    ┃┫┫ ┃┫┫
*    ┗┻┛ ┗┻┛+ + + +
*/

毛毛虫 树形DP相关推荐

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

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

  2. The Lost House POJ - 2057(树形dp+贪心 (双线最优子结构问题))

    思路 题意:有一只蜗牛爬上树睡着之后从树上掉下来,发现后面的"房子"却丢在了树上面, 现在这 只蜗牛要求寻找它的房子,它又得从树根开始爬起,现在要求一条路径使得其找到房子 所要爬行 ...

  3. BNUOJ 52305 Around the World 树形dp

    题目链接: https://www.bnuoj.com/v3/problem_show.php?pid=52305 Around the World Time Limit: 20000msMemory ...

  4. [树形dp] Jzoj P5233 概率博弈

    Description 小A和小B在玩游戏.这个游戏是这样的: 有一棵n个点的以1为根的有根树,叶子有权值.假设有m个叶子,那么树上每个叶子的权值序列就是一个1->m 的排列. 一开始在1号点有 ...

  5. fwt优化+树形DP HDU 5909

    1 //fwt优化+树形DP HDU 5909 2 //见官方题解 3 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/ 4 5 #include ...

  6. BZOJ 1040 ZJOI2008 骑士 树形DP

    题目大意:给定一个基环树林,每一个点上有权值,要求选择一个权值和最大的点集,要求点集中的随意两个点之间不能直接相连 最大点独立集--考虑到n<=100W,网络流铁定跑不了,于是我们考虑树形DP ...

  7. POJ 3342 树形DP+Hash

    这是很久很久以前做的一道题,可惜当时WA了一页以后放弃了. 今天我又重新捡了起来.(哈哈1A了) 题意: 没有上司的舞会+判重 思路: hash一下+树形DP 题目中给的人名hash到数字,再进行运算 ...

  8. [NC15748]旅游 树形dp基础

    菜鸡第一次接触树形dp这个东西,不过这个东西还是很好理解的(可能是因为模板题吧) 个人感觉,相比线性dp,树形dp的状态转移方程更加的直观,难点主要是在"树"的结构上比较麻烦. 题 ...

  9. 容斥 + 树形dp ---- 2021 icpc 沈阳 L Perfect Matchings

    题目链接 题目大意: 就是给你一个2n2n2n个点的完全图,从这个图里面抽出2n−12n-12n−1条边,这些边形成一颗树,现在问你剩下的图里面点进行完美匹配有多少种方案? 解题思路: 一开始被完美匹 ...

  10. 树形dp ---- gym101667 A(贪心 + 树形dp + 两个dp方程组维护)

    题目链接 题目大意: 就是一棵5e35e35e3的树,可以选择一些点,放上基站,如果uuu上的基站价值为ddd,那么距离uuu小于等于ddd的点都会被覆盖,问使得整棵树被覆盖需要的最小价值. 解题思路 ...

最新文章

  1. java 之 面向对象
  2. OVS bridge和port(三十三)
  3. 《剑指offer》-- 回溯法:矩阵中的路径、机器人的运动范围
  4. 也分享自己做的JS扫雷小游戏
  5. 阿里笔试-二叉树由前序遍历和中序遍历推导后序遍历
  6. 腾讯视频怎么开启禁止界面硬件加速
  7. 地图图表、柱状图、条形图、折线图、中国地图、世界地图、省市地图、仪表盘、雷达图、饼图、散点图、气泡图、瀑布图、堆叠图、热力图、桑基图、关系图、漏斗图、Axure原型、rp原型、产品原型
  8. 一个用python写的从数字高程格式文件(DEM)中提取水系的模块
  9. codeforces 711A A. Bus to Udayland(水题)
  10. Python 学习资源汇总
  11. java 如何保证配色通用_简单实用的通用配色法则,可以直接套用到日常的穿搭中...
  12. 计算机科班比其他专业有多少优势呢?
  13. 【金融财经】金融市场一周简报(2017-09-15)
  14. 基于TCP的简单服务器
  15. 提高代码质量的那些建议
  16. weui 可移动悬浮按钮
  17. B. Luxurious Houses
  18. 小花经过春雨的一番滋润
  19. windows server2012R将域名和访问的网址绑定
  20. 除了Sublime Text ,还有啥笔记应用能double代码效率?

热门文章

  1. Word 文档中的图片另存为 .jpg 格式图片方法
  2. java setvalue函数,Java JavaTuples setValue()用法及代码示例
  3. 【转】告诉你外语学习的真实方法及误区分析(精编版)-part 3
  4. Codeforces 474B. Worms
  5. 晚上睡觉手机放床头对大脑会有伤害吗
  6. python期权定价公式_期权及 Black-Scholes模型的python实现
  7. php rgb转cmyk,php – 使用Imagick将图像从RGB转换为CMYK
  8. 使用微信即时扫码开门
  9. 期权与期货有哪些不同?
  10. 【深度学习】【ICLR2019】DARTS代码解读