hdu 2196(求树上每个节点到树上其他节点的最远距离)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2196
思路:首先任意一次dfs求出树上最长直径的一个端点End,然后以该端点为起点再次dfs求出另一个端点,然后再次以求出的另一个端点为起点dfs,每次做dfs的时候都更新dist[](dist[u]表示u到树上任意节点的最远距离),可以证明树上任意某个节点到树上任意节点的最远距离的端点一定会是树上直径的两个端点之一。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<vector> 6 using namespace std; 7 #define MAXN 10100 8 9 struct Edge{ 10 int v,w; 11 Edge(int vv,int ww):v(vv),w(ww){} 12 }; 13 14 int n; 15 int dist[MAXN],max_len,End; 16 vector<vector<Edge> >G; 17 18 void dfs(int u,int father,int len) 19 { 20 if(len>max_len)max_len=len,End=u; 21 for(int i=0;i<G[u].size();i++){ 22 int v=G[u][i].v,w=G[u][i].w; 23 if(v==father)continue; 24 dfs(v,u,len+w); 25 dist[v]=max(dist[v],len+w); 26 } 27 } 28 29 int main() 30 { 31 int u,w; 32 while(~scanf("%d",&n)){ 33 G.clear(); 34 G.resize(n+2); 35 for(int i=2;i<=n;i++){ 36 scanf("%d%d",&u,&w); 37 G[i].push_back(Edge(u,w)); 38 G[u].push_back(Edge(i,w)); 39 } 40 memset(dist,0,sizeof(dist)); 41 max_len=0; 42 dfs(1,-1,0); 43 dfs(End,-1,0);//分别从最长路的两端进行dfs. 44 dfs(End,-1,0); 45 for(int i=1;i<=n;i++){ 46 printf("%d\n",dist[i]); 47 } 48 } 49 return 0; 50 }
View Code
转载于:https://www.cnblogs.com/wally/p/3311768.html
hdu 2196(求树上每个节点到树上其他节点的最远距离)相关推荐
- HDU 2196 求树上所有点能到达的最远距离
其实我不是想做这道题的...只是今天考试考了一道类似的题...然后我挂了... 但是乱搞一下还是有80分....可惜没想到正解啊! 所以今天的考试题是: 巡访 (path.pas/c/cpp) Cha ...
- HDU 2196 Computer 树形DP经典题
链接:http://acm.hdu.edu.cn/showproblem.php? pid=2196 题意:每一个电脑都用线连接到了还有一台电脑,连接用的线有一定的长度,最后把全部电脑连成了一棵树,问 ...
- hdu 2196 computer
hdu 2196 题意 给出一棵树,求出树上每一个点在树上走一条简单路径所能走的最长距离. 解法 说起来,这是我今天1A的第一题 我们设 \(up[i]\) 表示从这个点向上走到某个点又向下走的最长距 ...
- hdu 2009 求数列的和(c语言)
hdu 2009 求数列的和 link 题目描述 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...
- 求一颗二叉树中两个节点的最低公共父节点
题目:求一棵二叉树中两个节点的最低公共父节点 思路:递归 和 非递归 public static TreeNode getLastCommonParentRec(TreeNode root, Tree ...
- hdu 2006 求奇数的乘积(c语言)
hdu 2006 求奇数的乘积 link 题目描述 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...
- 二维凸包(模板) hdu 1348 求凸包的周长
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1348 凸包模板: const int N =1010; const double PI = 3.141 ...
- HDU - 2196(树形DP)
题目: A school bought the first computer some time ago(so this computer's id is 1). During the recent ...
- 求链表的倒数第N个节点
最近看一本书上有求链表的倒数第N个节点,简单实现了下 链表,实现方案如下 1.不借助链表长度顺序遍历倒数第N个节点 GetReserveN就是如此实现. 2.当然如果链表记录了节点长度也可以直接正序遍 ...
- HDU - 1890 Robotic Sort(Splay-区间翻转+删除根节点)
题目链接:点击查看 题目大意:给出一个序列,初始时是乱序的,要求根据规则排序,规则是,遍历每一个点 i ,使得区间 [ i , a[ i ] ] 内的数翻转,a[ i ] 表示的是数列中第 i 大的数 ...
最新文章
- Python的 if .else.elif语句详解
- java开发 中台
- leetcode算法题--可以形成最大正方形的矩形数目
- 【CodeForces - 260B 】Ancient Prophesy (暴力匹配,BF算法,日期字符串)
- MySQL 5.1.45 GA 发布
- python将一个文件夹下图片到另外一个文件夹下
- 潭州课堂25班:Ph201805201 爬虫高级 第十二 课 Scrapy-redis分布 项目实战 (课堂笔记)...
- mui 怎么调用系统键盘_电脑开机关机的几种方法,计算机电源键鼠标键盘网络唤醒图文教程...
- JAVA后台管理系统
- 基于React技术栈打造炫酷个人简历实战-郭永峰-专题视频课程
- 3D人体重建方法漫谈
- MATLAB热障涂层成像,微波检测热障涂层孔隙率的可行性研究
- 燃气行业引入电子签章推动燃气销售合同线上签署
- 新人进群发邮件软件,QQ群潜伏发邮件软件,一进群就收到邮件软件
- win10打开红警卡死的解决方法--win10专业版
- android 语音识别 离线,Android离线语音识别 PocketSphinx
- mysql 分桶_使用hive脚本一键动态分区、分区又分桶以及脚本步骤详细详解(亲测成功)...
- OpenNI SDK 2.0
- IATF16949认证辅导,促进减少在汽车零部件供应链中易发生的质量波动和浪费
- Opencv的Vec类使用说明(图像像素.at方法访问)
热门文章
- Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 54; columnNumbe
- vue基础之组件(创建,data,切换,父子以及同级之间的传值,插槽solt)
- Lucene 文档检索 详细说明
- 阶段5 3.微服务项目【学成在线】_day01 搭建环境 CMS服务端开发_17-页面查询接口定义-定义模型-需求分析和模型类...
- 阶段3 2.Spring_09.JdbcTemplate的基本使用_1 今日课程内容介绍
- Navicat连接Mysql报错:Client does not support authentication protocol requested by server;
- 阶段3 2.Spring_02.程序间耦合_8 工厂模式解耦的升级版
- 阶段3 1.Mybatis_03.自定义Mybatis框架_7.自定义Mybatis的编码-实现基于注解配置的查询所有...
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_5_InputStreamReader介绍代码实现...
- centos中文字符集,中文日志