【树形DP】 HDU 2196 Computer

题意:求节点间的最大距离


先DFS一次 记录下 每一节点的子树下的最大距离(DP[ u ] [ 0 ])和第二大距离(DP[ u ] [ 1 ])

用DP[ v ] [ 2 ] 表示由v的父节点来的最大距离

再取DP[ u ] [ 0 ] 与 DP[ u ][ 2 ] 的最值

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <string>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <cmath>
using namespace std;
#include <queue>
#include <stack>
#include <vector>
#include <deque>
#include <set>
#include <map>
#include <time.h>;
#define cler(arr, val)    memset(arr, val, sizeof(arr))
#define FOR(i,a,b)  for(int i=a;i<=b;i++)
#define IN   freopen ("in.txt" , "r" , stdin);
#define OUT  freopen ("out.txt" , "w" , stdout);
typedef long long  LL;
const int MAXN = 10014;
const int MAXM = 20014;
const int INF = 0x3f3f3f3f;
const int mod = 1000000007;
struct node
{int v,next;LL val;
} edge[MAXM];
int head[MAXM],tol;
LL dp[MAXN][3];
bool vis[MAXN];
void init()
{cler(head,-1);tol=0;
}
void addedge(int u,int v,LL val)
{edge[tol].v=v,edge[tol].val=val,edge[tol].next=head[u];head[u]=tol++;edge[tol].v=u,edge[tol].val=val,edge[tol].next=head[v];head[v]=tol++;
}
void dfs1(int u)
{if(vis[u]) return ;vis[u]=true;for(int i=head[u]; ~i; i=edge[i].next){int v=edge[i].v;if(!vis[v]){dfs1(v);dp[u][1]=max(dp[u][1],dp[v][0]+edge[i].val);if(dp[u][1]>dp[u][0])swap(dp[u][1],dp[u][0]);}}
}
void dfs2(int u)
{if(vis[u]) return ;vis[u]=true;for(int i=head[u]; ~i; i=edge[i].next){int v=edge[i].v,val=edge[i].val;if(!vis[v]){if(dp[u][0]>dp[v][0]+val)//dp[u][0]不是由dp[v][0]+val而来的dp[v][2]=max(dp[v][2],max(dp[u][0]+val,dp[u][2]+val));//所以从非v子树来的更长else //dp[u][0]由dp[v][0]+val而来的dp[v][2]=max(dp[v][2],max(dp[u][1]+val,dp[u][2]+val));//推断非v子树来的哪个长dfs2(v);}}
}
int main()
{
#ifndef ONLINE_JUDGEfreopen("in.txt", "r", stdin);
#endifint n;while(~scanf("%d",&n)){init();for(int i=2; i<=n; i++){int a;LL b;scanf("%d %I64d",&a ,&b );addedge(i,a,b);}cler(vis,false);cler(dp,0);dfs1(1);cler(vis,false);dfs2(1);for(int i=1;i<=n;i++)printf("%I64d\n",max(dp[i][2],dp[i][0]));}}


转载于:https://www.cnblogs.com/gccbuaa/p/7091545.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371837.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

适当的Java堆大小的5个技巧

确定生产系统合适的Java堆大小不是一件容易的事。 在我的Java EE企业经验中&#xff0c;我发现由于Java堆容量和调整不足而导致的多个性能问题。 本文将为您提供5个技巧&#xff0c;这些技巧可以帮助您确定当前或新生产环境的最佳Java堆大小。 这些技巧中的一些对于预防和解决j…

pythondocumentation是什么_怎样阅读Python官方文档

如何阅读官方Python文档的初学者,因为他们没有相关的经验,学习语言通常是费时且劳动密集型和效果不是很好。下面简要介绍如何阅读官方文件。一旦你学会快速查询官方文件,学习效率会提高很多文档门户。如何阅读API文档中内容标准库,如何快速找到你想要的。第一种方法是先查找索引…

数据库过大无法导入

导SQL数据库结构数据时&#xff0c;如果数据是批量插入的话会报错&#xff1a;2006 - MySQL server has gone away。 解决办法&#xff1a;找到你的mysql目录下的my.ini配置文件&#xff0c;加入以下代码 max_allowed_packet500M wait_timeout288000 interactive_timeout 2880…

UVa 11475 - Extend to Palindrome

題目&#xff1a;給你一個字符串&#xff0c;在後面拼接一部分使得它變成回文串&#xff0c;使得串最短。輸出這個回文串。分析&#xff1a;KMP&#xff0c;dp。這裡利用KMP算法將串和它的轉置匹配&#xff0c;看結束時匹配的長度就可以。 因為串比较長。使用KMP比较合適&#…

构建Java Web应用程序时遵循MVC的三个步骤

步骤1 做 始终通过servlet / action bean处理URL&#xff08;POST表单&#xff0c;单击链接等&#xff09;&#xff0c;而不是通过JSP处理 为什么 ActionBeans&#xff08;无论某些框架调用那些类&#xff09;&#xff0c;而servlet很少是控制器 用于处理用户输入。 JSP是专用于…

曝光原理_泰国精戈咖啡效果反馈 作用原理曝光

我的男人才三十五六&#xff0c;两个人就开始分开睡了&#xff0c;自从咱们在一起以来&#xff0c;咱们的感情一向很好&#xff0c;这是十分调和的。但随着年纪的添加&#xff0c;我逐渐发现他身体阑珊的越来越凶猛&#xff0c;夫妻生活方面硬度逐渐下降&#xff0c;时间也越来…

使用junit4测试Spring

Spring 提供便捷的测试&#xff0c;非常方便整合Junit 导入 spring-test-3.2.0.RELEASE.jar ---- 提供与Junit的整合 RunWith(SpringJUnit4ClassRunner.class) // 整合 ContextConfiguration(locations"classpath:applicationContext.xml") // 加载配置public class…

EasyCriteria –使用JPA Criteria的简便方法

今天&#xff0c;我们将看到有关此工具的信息&#xff0c;该工具使使用JPA Criteria更加容易。 使用该库的应用程序将在JPA实现中更加简洁&#xff0c;易于使用和可移植。 在本文的结尾&#xff0c;您将找到要下载的源代码。 什么是标准&#xff1f; 当前是创建动态查询的最佳…

语言模拟蒲丰问题_R语言小数定律的保险业应用:泊松分布模拟索赔次数

原文链接&#xff1a;拓端数据科技 / Welcome to tecdat​tecdat.cn在保险业中&#xff0c;由于分散投资&#xff0c;通常会在合法的大型投资组合中提及大数定律。在一定时期内&#xff0c;损失“可预测”。当然&#xff0c;在标准的统计假设下&#xff0c;即有限的期望值和独立…

THINKPHP

路径 /index.php/home/...一般路径应用或者U方法转载于:https://www.cnblogs.com/lidepeng/p/6180631.html

JavaScript下的进制转换

JavaScript下的进制转换 //十进制转其他进制 var num 99; console.log(十进制: , num); console.log(八进制:, (num).toString(8)) console.log(十六进制:, (num).toString(16)) console.log(三十二进制:, (num).toString(32))//其他转十进制 var x 110; console.log(二进制&…

Spring Security第2部分–密码加密,自定义404和403错误页面

这是Spring安全站的第二部分。 在这篇文章中&#xff0c;我将向您展示如何使用MD5加密密码以及自定义403和404状态代码错误页面。 如果您尚未阅读第1部分&#xff0c;请单击 此处 。 因为我们在这里继续第1部分项目。 下载已完成的项目&#xff1a; http : //www.mediafire.com…

浅谈 PHP 与手机 APP 开发(API 接口开发)

本文内容转载自:http://www.thinkphp.cn/topic/5023.html 这个帖子写给不太了解PHP与API开发的人一、先简单回答两个问题&#xff1a;1、PHP 可以开发客户端&#xff1f;答&#xff1a;不可以&#xff0c;因为PHP是脚本语言&#xff0c;是负责完成 B/S架构 或 C/S架构 的S部分&…

获取人口_「微科普」14亿人口数据是如何得到的?

中国经济交出了2019年终答卷GDP总量近百万亿元人均GDP突破1万美元……小伙伴们在关心经济发展的同时也非常关注人口数据14亿人口的话题嗖的一下就上了热搜大家想不想知道14亿人口的数据是怎么得到的&#xff1f;我们今天就来科普一下如何获取人口总量&#xff1f;通常情况下&am…

8.动态规划(1)——字符串的编辑距离

动态规划的算法题往往都是各大公司笔试题的常客。在不少算法类的微信公众号中&#xff0c;关于“动态规划”的文章屡见不鲜&#xff0c;都在试图用最浅显易懂的文字来描述讲解动态规划&#xff0c;甚至有的用漫画来解释&#xff0c;认真读每一篇公众号推送的文章实际上都能读得…

更改Java包名称如何改变我的系统架构

即使只是少量更改角度&#xff0c;也可能对您如何使用系统产生深远影响。 假设您正在用Java编写Web应用程序。 在系统中&#xff0c;您处理订单&#xff0c;客户和产品。 作为Web应用程序&#xff0c;您的类包括诸如Controller&#xff0c;PersonRepository&#xff0c;Custome…

静态属性_Java面试题—内部类和静态内部类的区别

内部类和静态内部类的区别内部类&#xff1a;1、内部类中的变量和方法不能声明为静态的。2、内部类实例化&#xff1a;B是A的内部类&#xff0c;实例化B&#xff1a;A.B b new A().new B()。3、内部类可以引用外部类的静态或者非静态属性及方法。静态内部类&#xff1a;1、静态…

储存与更新 access_token

做微信的项目&#xff0c;一开始就是 access_token 的申请&#xff0c;微信文档上写的比较清楚&#xff1a; 1、为了保密appsecrect&#xff0c;第三方需要一个access_token获取和刷新的中控服务器。而其他业务逻辑服务器所使用的access_token均来自于该中控服务器&#xff0c;…

Eclipse安装以及JDK环境变量配置

首先是下载Eclipse&#xff1b;点击链接打开Eclipse官网eclipse官网点击DownLoad Packages&#xff0c;注意是点击“DownLoad Packages”点击你需要的版本开始下载&#xff08;一般是64bit Eclipse IDE&#xff09;等待几秒钟&#xff0c;开始下载这样Eclipse已经下载好了&…

完整的Web应用程序Tomcat JSF Primefaces JPA Hibernate –第1部分

我们创建了这篇文章&#xff0c;将展示如何使用以下工具创建完整的Web应用程序&#xff1a;Tomcat7&#xff0c;带有Primefaces的JSF2&#xff08;Facelets和Libraries&#xff09;&#xff08;具有AutoComplete&#xff09;&#xff0c;JPA / Hibernate&#xff08;具有NxN关系…