博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 2196 树形dp
阅读量:5764 次
发布时间:2019-06-18

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

题意:   求每个点的最远距离。

树形dp,做了两天,感觉就是从子节点得到父节点。

此题要用到两次dfs, 第一次dfs1用来求所有节点在他子树范围内到叶子节点的最长距离和次长距离。dp1,和dp2

第二次dfs2 ,求f【】,如果dp1[s]==dp1[x]+len (s为父节点,x为子节点),则 x 在最长树的分支上,f[x]=max(f[s]+len,dp2[s]+len); 

所以f【x】就等于f父节点加上到子节点的距离和父节点的次长加上到x节点的距离的两者的最大值。

如果 不相等,则代表x节点不在父节点最长的分支上。则f【x】就等于f父节点到x节点的距离和父节点的最长距离加上到子节点距离 两者的最大值。

结果在max(f【】,dp1【】)

1 #include
2 #include
3 #include
4 #include
5 using namespace std; 6 const int Max=10001; 7 struct Point 8 { 9 int v,w;10 };11 vector
V[Max];12 int vis[Max];13 int f[Max],dp1[Max],dp2[Max];14 void init()15 {16 for(int i=1;i
代码

转载于:https://www.cnblogs.com/honglidream/p/3184569.html

你可能感兴趣的文章
Win 8创造颠覆性体验:预览版关键更新
查看>>
vim在多文件中复制粘贴内容
查看>>
Android ContentObserver
查看>>
疯狂java学习笔记1002---非静态内部类
查看>>
ISA2006实战系列之一:实战ISA三种客户端部署方案(上)
查看>>
TCP服务器
查看>>
AC旁挂三层交换机管理ap,二层接入ap心得
查看>>
JS中比较数字大小
查看>>
springcloud 学习-eureka搭建-为eureka添加认证
查看>>
jQuery插件的开发
查看>>
基础,基础,还是基础之JAVA基础
查看>>
如何成为一个C++高级程序员
查看>>
ant android 打包签名和渠道
查看>>
我的友情链接
查看>>
显式锁(第十三章)
查看>>
看linux书籍做的一些重要笔记(2011.07.03更新)
查看>>
CString、Char* ,char [20]、wchar_t、unsigned short转化
查看>>
从案例学RxAndroid开发(上)
查看>>
Redis学习手册(内存优化)
查看>>
浅尝TensorFlow on Kubernetes
查看>>