【题目链接】

点击打开链接

【算法】

我们知道,一棵树上离某个节点最远的节点,可能是经过它的祖先,再到那个祖先的某个孩子,或者,是它的那颗子树中,离它最远的一个节点,就不难想到以下算法 :

第一遍DFS,搜出每个节点的子树中离它距离最远的孩子的距离和所经过的儿子,离它次远的孩子的距离和所经过的儿子

第二遍DFS,树形DP求出每个点经过它的祖先节点的最远距离

【代码】

#include<bits/stdc++.h>
using namespace std;
#define MAXN 10010 int i,n,x;
int fa[MAXN],f[MAXN][],g[MAXN][],dp[MAXN];
vector< pair<int,int> > e[MAXN]; inline void init()
{
int i;
memset(f,,sizeof(f));
memset(dp,,sizeof(dp));
for (i = ; i <= n; i++) e[i].clear();
}
inline void dfs1(int x)
{
int i,y;
for (i = ; i < e[x].size(); i++)
{
y = e[x][i].first;
dfs1(y);
if (f[y][] + e[x][i].second >= f[x][])
{
f[x][] = f[x][];
g[x][] = g[x][];
f[x][] = f[y][] + e[x][i].second;
g[x][] = y;
} else if (f[y][] + e[x][i].second > f[x][])
{
f[x][] = f[y][] + e[x][i].second;
g[x][] = y;
}
}
}
inline void dfs2(int x)
{
int i,y;
for (i = ; i < e[x].size(); i++)
{
y = e[x][i].first;
if (g[x][] != y)
dp[y] = max(dp[y],max(dp[x],f[x][])+e[x][i].second);
else dp[y] = max(dp[y],max(dp[x],f[x][])+e[x][i].second);
dfs2(y);
}
} int main()
{ while (scanf("%d",&n) != EOF)
{
init();
for (i = ; i <= n; i++)
{
scanf("%d%d",&fa[i],&x);
e[fa[i]].push_back(make_pair(i,x));
}
dfs1();
dfs2();
for (i = ; i <= n; i++) printf("%d\n",max(f[i][],dp[i]));
} return ; }

最新文章

  1. CSharpGL(22)实现顺序无关的半透明渲染(Order-Independent-Transparency)
  2. NOI 题库 7218
  3. Linux crontab执行bash脚本
  4. Cortana 在安装语言包后失灵 | 解决
  5. tyvj1023 - 奶牛的锻炼 ——DP
  6. NodeJS学习之文件操作
  7. hdu5338 ZZX and Permutations(贪心、线段树)
  8. Redis key 设计技巧
  9. python之字符串的分割和拼接
  10. ASP.NET静态化方法
  11. 非阻塞式的原子性操作-CAS应用及原理
  12. 一个疑问,int对象5为何没有__dict__属性,而类却有,这是怎么做到的?对象不是都可以调用类属性吗?
  13. Hive记录-Hive调优
  14. Deep Learning系统实训之三:卷积神经网络
  15. Maven deploy部署jar到远程私服仓库
  16. python简说(十六)第三方模块安装
  17. Linux应急响应(一):SSH暴力破解
  18. Linux 下搭建 Svn+Apache
  19. Qt 多线程同步与通信
  20. flume A simple example

热门文章

  1. 生物遗传学 整理人PYJ (恋_紫花地丁)
  2. mybatis查询返回null解决方案
  3. 细胞分裂(洛谷 P1069)
  4. LCA 在线倍增法 求最近公共祖先
  5. java容器详解(以Array Arrays ArrayList为例)
  6. nginx学习网站收录
  7. 10.1——pair,map,set,multimap,multiset
  8. Xcode 全局搜索失效的问题
  9. 一句话从MySQL导出CSV文件
  10. CentOS 更改Apache默认网站目录