hdu 2196 computer

hdu 2196

题意

给出一棵树,求出树上每一个点在树上走一条简单路径所能走的最长距离。

解法

说起来,这是我今天1A的第一题
我们设
\(up[i]\) 表示从这个点向上走到某个点又向下走的最长距离
\(down[i][0]\) 表示从这个点出发向他的子树所能走到的最大距离,
\(down[i][1]\) 表示从这个点出发向他的子树所能走到的次大距离,
然后我们就可以愉快的开始转移了。
我们先dfs一边求出 \(down[i][0/1]\) ,然后我们再dfs一边求 \(up[i]\)
首先 \(up[i] = up[fa] + dis[i][fa]\)
如果 i 在 fa 向下走的最深路径上,那么: \(up[i] = max(up[i],dis[i][fa]+down[fa][1])\)
否则: \(up[i] = max(up[i],dis[i][fa]+down[fa][0])\)
最后每个点的答案为 \(max(up[i],down[i][0])\)

代码

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cctype>
#include <vector>
#define INF 2139062143
#define MAX 0x7ffffffffffffff
#define del(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
template<typename T>
inline void read(T&x)
{x=0;T k=1;char c=getchar();while(!isdigit(c)){if(c=='-')k=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}x*=k;
}
const int maxn=10000+5;
int up[maxn];
int down[maxn][2];
int n;
struct Edge{int u,v,w;Edge(int u=0,int v=0,int w=0):u(u),v(v),w(w){}
};
vector<Edge> edge;
vector<int> G[maxn];
void add_edge(int u,int v,int w) {edge.push_back(Edge(u,v,w));edge.push_back(Edge(v,u,w));int m=edge.size();G[u].push_back(m-2);G[v].push_back(m-1);
}void dfs1(int u,int fa) {for(int i=0;i<G[u].size();i++) {Edge e=edge[G[u][i]];int v=e.v;if(v==fa) continue;dfs1(v,u);if(down[v][0]+e.w>=down[u][0]){down[u][1]=down[u][0];down[u][0]=down[v][0]+e.w;}else if(down[v][0]+e.w>=down[u][1]) down[u][1]=down[v][0]+e.w;}
}
void dfs2(int u,int fa) {for(int i=0;i<G[u].size();i++) {Edge e=edge[G[u][i]];int v=e.v;if(v==fa) continue;if(down[u][0]!=down[v][0]+e.w)up[v]=e.w+down[u][0];else up[v]=e.w+down[u][1];up[v]=max(up[u]+e.w,up[v]);dfs2(v,u);}
}
void _init() {edge.clear();for(int i=1;i<=n;i++) G[i].clear();del(down,0);del(up,0);
}
int main()
{while(~scanf("%d",&n)){_init();for(int u=2,v,w;u<=n;u++) {read(v);read(w);add_edge(u,v,w);}dfs1(1,1);dfs2(1,1);for(int i=1;i<=n;i++) printf("%d\n",max(up[i],down[i][0]));}return 0;
}

转载于:https://www.cnblogs.com/mrasd/p/9550879.html

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

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

相关文章

CSS之盒模型

怎么理解盒子模型&#xff1f; 盒子模型是样式表&#xff08;css&#xff09;控制页面的很重要的概念。如果理解了盒子模型和其中每个元素的用法&#xff0c;才能熟练使用css的定位方法和技巧。所有的页面的元素都可以看成是一个盒子&#xff0c;占据一定的页面空间。占据的空…

[css] 使用css画个钟表的时间刻度

[css] 使用css画个钟表的时间刻度 写一下思路&#xff0c;先定义一个钟表的大小位置&#xff0c;用absolute,从1点到12点用ul,li。每个li可以用nth-child(对应第几个)来控制位置&#xff0c;角度用transform&#xff0c;然后分钟的刻度也是照样子分别控制位置&#xff0c;要用…

BZOJ 2301 - Problem b(莫比乌斯反演+容斥)

题目链接 https://cn.vjudge.net/problem/HYSBZ-2301 【题意】 对于给出的 n 个询问&#xff0c;每次求有多少个数对(x,y)(x,y) &#xff0c;满足 a≤x≤b&#xff0c;c≤y≤da≤x≤b&#xff0c;c≤y≤d &#xff0c;且 gcd(x,y)k&#xff0c;gcd(x,y)gcd(x,y)k&#xff0c;g…

前端两个经典bug

1、margin塌陷bug <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible&qu…

[css] 请使用css3实现图片的平滑转换

[css] 请使用css3实现图片的平滑转换 以全局监听的方式通过 a 标签的描点进行 view 动态切换页面&#xff0c;只要把 a 标签带有 id 的 href 属性的值指到锚点&#xff0c;用 CSS3 的动画进行切换页面.个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易…

== vs === in Javascript

本文来自网易云社区作者&#xff1a;魏文庆如果你只想知道与的区别&#xff0c;请直接看总结&#xff0c;当然我更希望您能耐心看完全文。Javascript中用于相等比较的操作符有两个和。我们通常称为“等于”&#xff0c;而我们通常称为“严格等于”。本文将对和做详细说明。相对…

[css] 使用纯css能否监控到用户的一些信息?怎么实现?

[css] 使用纯css能否监控到用户的一些信息&#xff1f;怎么实现&#xff1f; 利用:active 伪类实现监控用户的点击 .button-1:active::after {content: url(./pixel.gif?actionclick&idbutton1);display: none; } .button-2:active::after {content: url(./pixel.gif?ac…

hive 动态分区实现 (hive-1.1.0)

hive 动态分区实现 &#xff08;hive-1.1.0&#xff09; 笔者使用的hive版本是hive-1.1.0 hive-1.1.0动态分区的默认实现是只有map没有reduce,通过执行计划就可以看出来。&#xff08;执行计划如下&#xff09; insert overwrite table public_t_par partition(delivery_dateke…

浏览器的组成

外壳shell&#xff1a;User Interface&#xff08;用户界面&#xff09;、Browser engine&#xff08;浏览器引擎&#xff09;、Networking&#xff08;网络&#xff09;、UI Backend&#xff08;UI 后端&#xff09;、Date Persistence&#xff08;数据持久化存储&#xff09;…

[css] css的加载会阻塞js运行吗?为什么?

[css] css的加载会阻塞js运行吗&#xff1f;为什么&#xff1f; 会阻塞js的执行&#xff0c;因为js可能会去获取或改变元素的样式&#xff0c;所以浏览为了不重复渲染&#xff0c; 等所有的css加载渲染完成后在执行js个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知…

JS基础知识点总结

NaN 与任何值相比较 都是false (包括它自己 如NaN NaN >false)&#xff0c;可以理解为它连自己的不认识parseInt("123abc") 计算机是从头到尾读字符串&#xff0c;如果不是数字就截断&#xff0c;直接返回parseFloat同理num 123.1456789 num.toFixed(3…

[css] css的加载会阻塞DOM树解析和渲染吗?为什么

[css] css的加载会阻塞DOM树解析和渲染吗&#xff1f;为什么 css的加载不会阻止DOM树的解析 css的加载会阻止DOM树的渲染&#xff0c;因为css的下载完成后解析成CSSOM与DOM生成渲染树后&#xff0c;页面才会渲染&#xff0c;绘制出来个人简介 我是歌谣&#xff0c;欢迎和大家…

0901

下拉刷新一万赞&#xff1a;https://github.com/scwang90/SmartRefreshLayout git上搜索&#xff1a;refreshLayouthttps://github.com/search?odesc&qrefreshLayout&sstars&typeRepositories SwipeRefreshLayout pullRefresh XRecyclerView转载于:https://www.cn…

jQuery Validate 前端校验

参考自&#xff1a;https://www.runoob.com/jquery/jquery-plugin-validate.html 建议&#xff1a;将引入的js&#xff0c;jQuery&#xff0c;css文件下载到自己的本地或者远程服务器 否则&#xff1a;如果您的网站使用了SSL证书请求的安全策略&#xff0c;注意引用的文件是否…

[css] 异步加载CSS的方式有哪些?

[css] 异步加载CSS的方式有哪些&#xff1f; 异步加载CSS 说到加载 CSS 这种事儿不是很简单吗&#xff1f;像这样咯&#xff1a; 这不就完事儿了嘛&#xff01; 这样是没错&#xff01;但是这样有问题啊——会阻塞渲染&#xff01;浏览器看到这个标签就会停下手里的活儿&…

Golang 垃圾回收机制

1. Golang GC 发展 Golang 从第一个版本以来&#xff0c;GC 一直是大家诟病最多的。但是每一个版本的发布基本都伴随着 GC 的改进。下面列出一些比较重要的改动。 v1.1 STWv1.3 Mark STW, Sweep 并行v1.5 三色标记法v1.8 hybrid write barrier2. GC 算法简介  这一小节介绍三…

Bootstrap FileInput(文件上传)中文API整理

下载地址、API和DOM地址&#xff08;英语好的小伙伴可以看看&#xff09; 下载地址&#xff1a;https://github.com/kartik-v/bootstrap-fileinput API文档 &#xff1a;http://plugins.krajee.com/file-input D E M O&#xff1a;http://plugins.krajee.com/file-input/demo …

[css] 举例说明如何从html元素继承box-sizing?

[css] 举例说明如何从html元素继承box-sizing&#xff1f; html{box-sizing:border-box;}*,*:before,*:after{box-sizing:inherit;}个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起…

Configutation读取properties文件信息

commons configuration可以很方便的访问配置文件和xml文件中的的内容。Commons Configuration 是为了提供对属性文件、XML文件、JNDI资源、来自JDBC Datasource数据的访问。 官方文档&#xff1a;http://commons.apache.org/proper/commons-configuration/ 我们研究configurati…

JavaScript 所有数据类型

JavaScript 所有数据类型 在 JavaScript 中有 5 种不同的数据类型&#xff1a; stringnumberbooleanobjectfunction 3 种对象类型&#xff1a; ObjectDateArray 2 个不包含任何值的数据类型&#xff1a; nullundefined 可以使用 typeof 操作符来查看 JavaScript 变量的数据…