博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[hihocoder 1050]求树的最长链
阅读量:5034 次
发布时间:2019-06-12

本文共 1026 字,大约阅读时间需要 3 分钟。

题目链接:

两种方法:

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

#include
using namespace std;const int maxn=100005;int d[maxn];vector
G[maxn];void dfs(int u,int fa,int now){ d[u]=now; for (int i=0;i
ma) { ma=d[i]; maj=i; } } dfs(maj,0,0); int ans=0; for (int i=1;i<=n;i++) ans=max(ans,d[i]); printf("%d",ans); return 0;}

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

#include
using namespace std;const int maxn=100005;int dp[maxn][2];vector
G[maxn];void dfs(int u,int fa){ for (int i=0;i
dp[u][0]) { dp[u][1]=dp[u][0]; dp[u][0]=dp[v][0]+1; } else dp[u][1]=max(dp[v][0]+1,dp[u][1]); } } }}int main(){ int n; scanf("%d",&n); G[1].push_back(0); for (int i=0;i

 

转载于:https://www.cnblogs.com/acmsong/p/7666863.html

你可能感兴趣的文章
mysql 性能优化思路 - mysqldumpslow /tmp/mysql-slow.log 字符集 utf-8 create database
查看>>
subprocess.call(cmd, shell=True)
查看>>
主从复制报错
查看>>
java多线程快速入门(六)
查看>>
微信小程序地图总结
查看>>
第一次作业 1.8
查看>>
Java操作redis
查看>>
理解并设计rest/restful风格接口
查看>>
PHP preg_match正则表达式的使用
查看>>
Permutation Recovery
查看>>
WPF,Silverlight与XAML读书笔记第二十 - 控件之二 – 内容控件(命令控件)
查看>>
js补充之作用域
查看>>
12.4号
查看>>
安装JMeter
查看>>
虚方法与抽象方法有什么区别
查看>>
20181126-java-面试知识-收集
查看>>
POJ-3295 Tautology 枚举+DFS
查看>>
KRPano多屏互动原理
查看>>
KRPano动态热点专用素材图50多个,加动态热点使用方法
查看>>
yii模型ar中备忘
查看>>