题目链接:http://hihocoder.com/problemset/problem/1050

两种方法:

1. 两遍dfs,第一次随便找一个根,找到距离这个根最远的点,这个点必然是最长链的一端。第二次就用这个端点做一遍dfs,最远的点就是另一端。

#include<bits/stdc++.h>
using namespace std; const int maxn=;
int d[maxn];
vector<int> G[maxn]; void dfs(int u,int fa,int now)
{
d[u]=now;
for (int i=;i<G[u].size();i++)
{
int v=G[u][i];
if (v!=fa) dfs(v,u,now+);
}
} int main()
{
int n;
scanf("%d",&n);
for (int i=;i<n-;i++)
{
int u,v;
scanf("%d%d",&u,&v);
G[u].push_back(v);
G[v].push_back(u);
}
dfs(,,);
int ma=,maj=;
for (int i=;i<=n;i++)
{
if (d[i]>ma)
{
ma=d[i];
maj=i;
}
}
dfs(maj,,);
int ans=;
for (int i=;i<=n;i++) ans=max(ans,d[i]);
printf("%d",ans);
return ;
}

2. 树形dp。记dp[i][0/1]表示以i为lca的最长链和次长链的长度,一遍dfs更新就好了。

#include<bits/stdc++.h>
using namespace std; const int maxn=;
int dp[maxn][];
vector<int> G[maxn]; void dfs(int u,int fa)
{
for (int i=;i<G[u].size();i++)
{
int v=G[u][i];
if (v!=fa) dfs(v,u);
}
if (G[u].size()<=)
{
for (int i=;i<G[u].size();i++)
{
int v=G[u][i];
if (v!=fa) dp[u][]=dp[v][]+;
}
}
else
{
for (int i=;i<G[u].size();i++)
{
int v=G[u][i];
if (v!=fa)
{
if (dp[v][]+>dp[u][])
{
dp[u][]=dp[u][];
dp[u][]=dp[v][]+;
}
else dp[u][]=max(dp[v][]+,dp[u][]);
}
}
}
} int main()
{
int n;
scanf("%d",&n);
G[].push_back();
for (int i=;i<n-;i++)
{
int u,v;
scanf("%d%d",&u,&v);
G[u].push_back(v);
G[v].push_back(u);
}
dfs(,);
int ans=;
for (int i=;i<=n;i++) ans=max(ans,dp[i][]+dp[i][]);
printf("%d",ans);
return ;
}

最新文章

  1. ViewBag 找不到编译动态表达式所需的一种或多种类型,是否缺少引用?
  2. PLS入门
  3. Object-C 中各数据类型转换 NSData转NSString,Byte,UIImage
  4. Ugly Number II
  5. Codeforces Round #370 (Div. 2)C. Memory and De-Evolution 贪心
  6. js判断浏览器种类以及版本号(从jquery1.8中抠出来的)
  7. 配置ipvsadm服务
  8. PHP学习(三)----面向对象
  9. PHP中::、-&gt;、self、parent::、$this操作符的区别
  10. 如何让sudo命令不需要输入密码就可执行
  11. Linux目录和权限
  12. awk笔记1
  13. css 自适应布局
  14. keepalived 结合mysql 自动切换
  15. Java :BufferedWriter类和BufferedReader类的构造方法、主要方法
  16. 使用Python分析ELF文件优化Flash和Sram空间的案例
  17. [翻译 EF Core in Action 1.11] 何时不应该使用EF Core
  18. Ceph分布式存储集群-硬件选择
  19. python数据结构之树(概述)
  20. Mysql命令insert into:向表中插入数据(记录)

热门文章

  1. python爬虫:爬取链家深圳全部二手房的详细信息
  2. 使用source命令解决mysql导入乱码问题
  3. Kubernetes-运维指南
  4. P2153 [SDOI2009]晨跑(最小费用最大流)
  5. delphi 数据库中Connection与Query连接数量问题思考
  6. Python的入坑之路(1)
  7. LeetCode:7. Reverse Integer(Easy)
  8. 创龙TMS320C6748开发板串口和中断学习笔记
  9. 从一个线上服务器警告谈谈backlog
  10. 使用Visual Studio 2017构建.Net Core的Docker镜像