C++-HDU2196-Computer-[树的直径]
直径定义:树上的最长路径,不妨设端点分别为s,t
可以证明(感觉):每个点到其最远点必定为s or t,反之亦然
首先,第一次dfs找到s
然后,第二次dfs以s为根找到t
最后,第三次dfs以t为根
比较二三两次的当前点深度可得到答案
#include <set>
#include <map>
#include <cmath>
#include <queue>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN=,MAXM=;
struct edge{
int u,v,w,next;
edge(int u=,int v=,int w=,int next=):u(u),v(v),w(w),next(next){}
}; edge E[MAXM];
int head[MAXN],fa[MAXN],dis[MAXN],ans[MAXN],cnt,n,s,t,maxdis;
void add(int u,int v,int w){
E[++cnt]=edge(u,v,w,head[u]),head[u]=cnt;
E[++cnt]=edge(v,u,w,head[v]),head[v]=cnt;
} int dfs(int x,int fa){
for(int i=head[x];i;i=E[i].next)
if(E[i].v!=fa){
dis[E[i].v]=max(dis[x]+E[i].w,dis[E[i].v]);
dfs(E[i].v,x);
}
} int search(int root){
int x=root;
maxdis=,memset(dis,,sizeof(dis)),dfs(root,root);
for(int i=;i<=n;i++)if(dis[i]>maxdis)maxdis=dis[i],x=i;
return x;
} int main(){
while(scanf("%d",&n)!=EOF){
cnt=;
memset(head,,sizeof(head));
for(int u=,v,w;u<=n;u++)scanf("%d%d",&v,&w),add(u,v,w);
int s=search();
int t=search(s);
for(int i=;i<=n;i++)ans[i]=dis[i];
search(t);
for(int i=;i<=n;i++)printf("%d\n",max(ans[i],dis[i]));
}
return ;
}
C++-HDU2196-Computer-[树的直径]的更多相关文章
- [hdu2196]Computer树的直径
		
题意:求树中距离每个节点的最大距离. 解题关键:两次dfs,第一次从下向上dp求出每个节点子树中距离其的最大距离和不在经过最大距离上的子节点上的次大距离(后序遍历),第二次从上而下dp求出其从父节点过 ...
 - 【HDU 2196】 Computer(树的直径)
		
[HDU 2196] Computer(树的直径) 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 这题可以用树形DP解决,自然也可以用最直观的方法解 ...
 - hdu 2196 Computer  树的直径
		
Computer Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem ...
 - HDOJ 2196 Computer 树的直径
		
由树的直径定义可得,树上随意一点到树的直径上的两个端点之中的一个的距离是最长的... 三遍BFS求树的直径并预处理距离....... Computer Time Limit: 1000/1000 MS ...
 - codeforces GYM 100114 J. Computer Network 无相图缩点+树的直径
		
题目链接: http://codeforces.com/gym/100114 Description The computer network of “Plunder & Flee Inc.” ...
 - codeforces GYM 100114 J. Computer Network tarjan 树的直径 缩点
		
J. Computer Network Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Des ...
 - HDU 2196.Computer 树形dp 树的直径
		
Computer Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
 - [J]computer network tarjan边双联通分量+树的直径
		
https://odzkskevi.qnssl.com/b660f16d70db1969261cd8b11235ec99?v=1537580031 [2012-2013 ACM Central Reg ...
 - computer(树形dp || 树的直径)
		
Computer Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
 - hdu2196 树的直径 + bfs
		
//Accepted 740 KB 15 ms //树的直径 //距离一个顶点最远的点一定是树的直径的一个端点 #include <cstdio> #include <cstring ...
 
随机推荐
- maven发布java-分支构建
			
1.安装parameter插件 2. 新建maven项目 3.配置maven项目 4.配置maven项目2 5.配置maven项目3 6. 模拟开发给提交打tag标签 7.版本发布 8.tag获取并构 ...
 - mybatis第二天02
			
MyBatis第二天内容 1.mybatis的执行原理 通过: 1.全局配置文件SqlMapConfig.xml 映射文件mapper.xml 获取得到SqlSessinFactory工厂 2.由工 ...
 - 0级搭建类007-Ubuntu Desktop Linux安装 (18.04.2) 公开
			
项目文档引子系列是根据项目原型,制作的测试实验文档,目的是为了提升项目过程中的实际动手能力,打造精品文档AskScuti. 项目文档引子系列目前不对外发布,仅作为博客记录.如学员在实际工作过程中需提前 ...
 - 在Spring中使用嵌入式数据库-H2
			
Spring3以后开始支持嵌入式数据库,嵌入式数据库目前在市面上有好多种,HSQL,DERBY,H2...今天就主要讲一下h2的使用 对于一个数据库产品来说,主要就是如何存储数据和读取数据了.所谓嵌入 ...
 - html中引入调用另一个html文件
			
第一种: <body> <div id="page1"></div> <div id="page2"></ ...
 - 洛谷P1551 亲戚 (并查集模板题)
			
链接 https://www.luogu.org/problemnew/show/P1551 代码 #include<bits/stdc++.h> using namespace std; ...
 - The Number of Inversions
			
For a given sequence A={a0,a1,...an−1}A={a0,a1,...an−1}, the number of pairs (i,j)(i,j) where ai> ...
 - Dijkstra算法依据项目改进版,输出路径
			
package dijkstra; import java.util.ArrayList; public class Dijkstra { ; /*private static int[][] Gra ...
 - c#后端 小程序上传图片
			
c#后端: /// <summary> /// 上传图片 /// </summary> /// <returns></returns> [HttpPos ...
 - AntDesign(React)学习-3 React基础
			
前面项目已经建起来了,但是没有React基础怎么办,从头学习,这个项目使用的是基于React16.X版本的几种技术集成,那么我们就从网上找一些相关的资料进行研究,我的习惯是用到哪学到哪. 一.先看一些 ...