前言:

虽然很多人和我想法一样 ,但我还是不要脸地写了这题解

题目:

链接

大意:

在一棵树上取一条最长链以及它所连接的结点总共的结点个数

思路:

取链:

用树形\(DP\)就可以轻而易举的解决这个问题:

\(f_x\)表示以\(x\)为根节点的树的深度

转移方程:

\[f_x=max\{f_y + 1 \} (y\in son(x))
\]

那么以\(x\)为根节点的树的最长链就是\(f_x\)加上次大的子树深度,下方代码区以\(ans\)来表示。

代码:

void dp(int x, int root)
{
f[x] = 1;
int maxn = 0, lown = 0; //最大 与 次大
for (int i = head[x]; i; i = next[i])
{
int y = to[i];
if (y == root) continue;
dp(y, x);
if(f[y] > lown)
{
if(f[y] > maxn) lown = maxn, maxn = f[y];
else lown = f[y];
}
f[x] = max(f[x], f[y] + 1);
}
ans = max(ans, f[x] + lown);
}

链所连接的结点:

也就是说只用加上周边的结点就可以了,不用再递归下去。

那我们先在\(\texttt{main()}\)里记录每个节点的儿子个数

然后递归就可以直接加上去就可以惹!

代码:

void dp(int x, int root)
{
f[x] = 1;
int num = 0;
int maxn = 0, lown = 0;
for (int i = head[x]; i; i = next[i])
{
int y = to[i];
if (y == root) continue;
dp(y, x);
if(f[y] > lown)
{
if(f[y] > maxn) lown = maxn, maxn = f[y];
else lown = f[y];
}
f[x] = max(f[x], f[y] + son[x] - 1); //减1是因为父结点也算进去了
}
ans = max(ans, lown + maxn + son[x] - 1);
} int main()
{
scanf("%d%d", &n, &m);
for (int i = 1; i <= m; i++)
{
int x, y;
scanf("%d%d", &x, &y);
ADD(x, y);
ADD(y, x);
son[x] ++, son[y] ++;
}
dp(1, 0);
printf("%d", ans);
return 0;
}

祝\(CSP.rp++\)

最新文章

  1. Android开发案例 - 注册登录
  2. 怎么才能算大项目(Application),大的衡量?
  3. hybird混合式开发搭建
  4. 再谈CocoaPods
  5. IntelliJ IDEA 常用设置讲解2
  6. JVM-对象的存活与死亡
  7. 深入.net平台和c#编程 学习笔记
  8. [转贴]JAVA 百度地图SDK地图学习——实现定位功能
  9. MFC添加自定义消息
  10. PHP Memcached 实现简单数据库缓存
  11. C#程序遍历数组A中所有元素
  12. LeetCode 501. Find Mode in Binary Search Tree (找到二叉搜索树的众数)
  13. Spring Boot 整合 elasticsearch
  14. PA教材提纲 TAW12-1
  15. Spring源码追踪1——doGetBean(为什么org.springframework.data.redis.core.RedisTemplate的实例可以注入为ListOperations)
  16. java中printf()方法简单用法
  17. 点击单个cell高度变化的动画效果
  18. HDU 2113 Secret Number
  19. js_网页导出pdf文件
  20. jquery 获取某a标签的href地址 实现页面加载时跳转

热门文章

  1. SpringBoot 整合 Elasticsearch深度分页查询
  2. 学习笔记43_T4模板
  3. 掌握git命令的正确使用姿势
  4. 安全路径——最短路径树+dsu缩边
  5. FastDFS图片服务器单机安装步骤(修订版)
  6. Unity中动态创建Mesh
  7. js的split()和join()的用法
  8. 解决vuex的数据刷新(F5)后会被初始化的问题
  9. 如何解决UNMOUNTABLE BOOT VALUME
  10. PHP的global和$GLOBALS的区别