HDU2196computer
就是求每个点为起始点的最长链的长度。
写一下各个数组的意思吧。
f[i][0]为点i向下走最长的距离;f[i][1]为点i向下走第二长的距离;
xia[i][0]为点i向下走最长距离所要走的儿子节点;
xia[i][1]为点i向下走第二长长距离所要走的儿子节点;
f[i][2]为点i向上走的最大距离;
显而易见求向下的DP递推就好了。
求向上的DP
注意:两个DP都是从根节点往下更新。
#include<cstdio>
#include<algorithm>
#include<cstring>
#define maxn 10010 << 1
using namespace std;
int head[maxn],tot,n,u,v,val,len[maxn],f[maxn][];
int xia[maxn][],l[maxn];
struct st{
int v,val,next;
st clear(){
v = val = next = ;
}
}s[maxn]; void add(int u,int v,int val)
{
tot++;
s[tot].v = v;
s[tot].val = val;
s[tot].next = head[u];
head[u] = tot;
} void dfs(int fa,int now)
{
for(int i=head[now];i;i=s[i].next)
if(s[i].v != fa)
{
l[s[i].v] = s[i].val;
dfs(now,s[i].v);
len[now] = max(len[s[i].v] + s[i].val,len[now]);
int k = len[s[i].v] + s[i].val;
if(f[now][] < k)
{
f[now][] = k;
xia[now][] = s[i].v;
}
if(f[now][] > f[now][])
{
swap(xia[now][],xia[now][]);
swap(f[now][],f[now][]);
}
}
} void find(int fa,int now)
{
f[now][] = max(f[fa][] , now == xia[fa][] ? f[fa][] : f[fa][]) + l[now];
for(int i=head[now];i;i=s[i].next)
if(s[i].v != fa)
find(now,s[i].v);
} int main(){ while(scanf("%d",&n) != EOF)
{ for(int i=;i<= * n;i++)
{
head[i] = f[i][] = f[i][] = f[i][] = len[i] = l[i] = xia[i][] = xia[i][] = ;
s[i].clear();
}
tot = ;
for(int i=;i<=n;i++)
{
scanf("%d%d",&v,&val);
add(i,v,val);
add(v,i,val);
} dfs(,); find(,); for(int i=;i<=n;i++) printf("%d\n",max(f[i][],f[i][])); }
}
HDU2196computer的更多相关文章
- HDU2196computer(树上最远距离 + DP)
Computer Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- HDU2196-Computer
原题连接: http://acm.hdu.edu.cn/showproblem.php?pid=2196 思路: 好了,无敌了,经过昨晚4个钟头+今上午1个小时的奋战,这题终于被我AC了 收获的确是不 ...
- hdu2196Computer 树形DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2196 思路: 一看就是一道树形DP的题目,对于一个节点来说,到它的最远距离的路径可能来于子树,也可能来 ...
- HDU-2196-Computer(树上DP)
链接: http://acm.hdu.edu.cn/showproblem.php?pid=2196 题意: A school bought the first computer some time ...
随机推荐
- 【基本优化实践】【1.4】tempdb优化
[1]tempdb介绍 tempdb全局存储内部对象,用户对象,临时表,临时对象,以及SQL Server操作创建的存储过程.每个数据库实例只有一个tempdb,所以可能存在性能以及磁盘空间瓶颈. 各 ...
- HNUST-1148 ACM ranking rules(简单模拟)
1148: ACM ranking rules 时间限制: 1 Sec 内存限制: 128 MB提交: 16 解决: 12[提交][状态][讨论版] 题目描述 ACM contests, like ...
- css3 加载动画
代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8& ...
- linux下重启tomcat命令
在Linux系统下,重启Tomcat使用命令操作的! 首先,进入Tomcat下的bin目录 cd /usr/local/tomcat/bin 使用Tomcat关闭命令 ./shutdown.sh 查看 ...
- intellij 编译 springmvc+hibernate+spring+maven 找不到hbm.xml映射文件
1. 错误信息 Invocation of init method failed; nested exception is org.hibernate.MappingNotFoundException ...
- python子进程模块subprocess详解
subprocess--子进程管理器一.subprocess 模块简介subprocess最早是在2.4版本中引入的.subprocess模块用来生成子进程,并可以通过管道连接它们的输入/输出/错误, ...
- 学习-Pytest(三)setup/teardown
1. 用例运行级别 模块级(setup_module/teardown_module)开始于模块始末,全局的 函数级(setup_function/teardown_function)只对函数用例生效 ...
- 5月Linux市场Steam 份额在增长
随着新的一个月的开始,Valve公布了上个月的软件/硬件调查数据.在2019年5月,Steam Linux的使用率按百分比略微上升. 上个月,运行Linux的Steam用户比例(根据有争议的Steam ...
- byteArray转换为double,int
/*将int转为低字节在前,高字节在后的byte数组 b[0] = 11111111(0xff) & 01100001 b[1] = 11111111(0xff) & (n & ...
- Fuel9.0部署
一.安装环境(准备工作): 1. 所需物理主机的要求如下 内存:8GB+,推荐16GB:(少于8GB的就免谈了) 磁盘:500GB+: 物理机OS:ubuntu-desktop-amd64 14.04 ...