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 ...
随机推荐
- 【转】应用宝基于Robotium自动化测试
(转载:http://tmq.qq.com/2016/05/robotium_for_app_test/) 1 背景目的应用宝项目组采用FT(Feature Team)模式,整个项目组分为多个FT,而 ...
- ElasticSearch Kibana 创建索引,删除索引,查看索引配置
1.输入命令,点击绿色的三角形箭头. PUT chuyuan //创建索引 GET chuyuan/_settings //查看chuyuan索引下的配置 GET _all/_settings ...
- [官网]关于EPEL
EPEL/zh-cn https://fedoraproject.org/wiki/EPEL/zh-cn Contents [hide] 1企业版 Linux 附加软件包(EPEL) 1.1什么是企 ...
- property可以声明得位置
property可以声明的位置有4处 1 @interface处 2 扩展处 3 protocol处 4 分类处 其中分类处的property不会合成实例变量,并且编译器也不会自动合成实例变量
- C#杀进程与之之子进程
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...
- QItemDelegate edit某个控件后把数据写回model
QWidget *TrackDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const ...
- JS预解释
1.声明(declare) var num // 告诉浏览器在全局作用域中有一个num变量 定义(defined) num = 12 // 给我们的比变量进行赋值 2.var:在预解释时只是提前 ...
- cx_Oracle 操作oracle数据库
cx_Oracle 操作oracle数据库 class MyOracle(): def __init__(self, host_name="ip", port=1521, sid= ...
- stars-one的原创工具——星之小说下载器(JavaFx应用 )
星之小说下载器Kotlin版 基于星之小说下载器Java版重构的Kotlin版本 github地址 使用说明 确保电脑有jdk8+以上的环境,双击即可运行(win10系统),win7则需要输入命令ja ...
- DataWorks(数据工场)
一.DataWorks(数据工场) DataWorks系列视频 https://help.aliyun.com/video_list/107549.html?spm=a2c4g.11174359.3. ...