九度oj 题目1536:树的最小高度
- 题目描述:
-
给定一棵无向树, 我们选择不同的节点作为根节点时,可以得到不同的高度(即树根节点到叶子节点距离的最大值), 现在求这棵树可能的最低高度。
- 输入:
-
输入可能包含多个测试案例。
对于每个测试案例,输入的第一行为一个整数n(1 <= n <= 1000000)。
接下n-1行,每行包括两个整数u,v( 0<= u,v < n)代表这棵树的一个边连接的两个顶点。
- 输出:
-
对应每个测试案例,输出这棵树可能的最小高度。
- 样例输入:
-
3
0 1
1 2
5
0 1
1 2
1 3
1 4
- 样例输出:
-
1
1 这个题技巧性很强,
最小高度为树中两结点最长距离的一半,故关键是求两点间的最长距离
求最长距离时,首先对任一节点进行dfs或bfs,找到其最远距离点,再对此点进行第二次dfs或bfs遍历,得出的距离既是最远距离。
dfs代码如下#include <cstdio>
#include <cstring>
#include <vector>
#include <iostream>
using namespace std; vector<int>tree[];
int n;
int visit[];
int maxP, maxDepth; void dfs(int m, int dept) {
if(maxDepth < dept) {
maxDepth = dept;
maxP = m;
}
int sizem = tree[m].size();
for(int i = ; i < sizem; i++) {
int j = tree[m][i];
if(visit[j] == ) {
visit[j] = ;
dfs(j, dept+);
visit[j] = ;
}
}
}
int main(int argc, char const *argv[])
{
//freopen("input.txt","r",stdin);
while(scanf("%d",&n) != EOF) {
for(int i = ; i < n; i++) {
tree[i].clear();
}
int a, b;
n--;
while(n--) {
scanf("%d %d",&a, &b);
tree[a].push_back(b);
tree[b].push_back(a);
}
memset(visit, , sizeof(visit));
maxP = , maxDepth = ;
visit[] = ;
dfs(, ); memset(visit, , sizeof(visit));
maxDepth = ;
visit[maxP] = ;
dfs(maxP, ); int ans = (maxDepth + )/;
printf("%d\n",ans); }
return ;
}bfs代码如下
#include <cstdio>
#include <cstring>
#include <vector>
#include <iostream>
#include <queue>
using namespace std; vector<int> tree[];
queue<int> treeq;
int n;
int visit[];
int depth[]; int maxP, maxDepth; void bfs() {
while(!treeq.empty()) {
int p = treeq.front();
treeq.pop(); int sizep = tree[p].size();
for(int i = ; i < sizep; i++) {
int j = tree[p][i];
if(visit[j] == ) {
visit[j] = ;
depth[j] = depth[p] + ;
if(maxDepth < depth[j]) {
maxDepth = depth[j];
maxP = j;
}
treeq.push(j);
}
}
}
} int main(int argc, char const *argv[])
{
//freopen("input.txt","r",stdin);
while(scanf("%d",&n) != EOF) {
for(int i = ; i < n; i++) {
tree[i].clear();
}
int a, b;
n--;
while(n--) {
scanf("%d %d",&a, &b);
tree[a].push_back(b);
tree[b].push_back(a);
}
memset(visit, , sizeof(visit));
maxP = , maxDepth = ; treeq.push();
visit[] = ;
depth[] = ;
bfs(); memset(visit, , sizeof(visit));
maxDepth = ;
treeq.push(maxP);
visit[maxP] = ;
depth[maxP] = ;
bfs(); int ans = (maxDepth + )/;
printf("%d\n",ans); }
return ;
}
九度oj 题目1536:树的最小高度的更多相关文章
- 九度oj题目&吉大考研11年机试题全解
九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码). http://ac.jobdu.com/problem.php?pid=11 ...
- 九度oj 题目1007:奥运排序问题
九度oj 题目1007:奥运排序问题 恢复 题目描述: 按要求,给国家进行排名. 输入: 有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...
- 九度OJ 题目1384:二维数组中的查找
/********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...
- hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人
钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 九度oj题目1009:二叉搜索树
题目描述: 判断两序列是否为同一二叉搜索树序列 输入: 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...
- 九度oj 题目1087:约数的个数
题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...
- 九度OJ题目1105:字符串的反码
tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...
- 九度oj题目1002:Grading
//不是说C语言就是C++的子集么,为毛printf在九度OJ上不能通过编译,abs还不支持参数为整型的abs()重载 //C++比较正确的做法是#include<cmath.h>,cou ...
- 九度OJ题目1003:A+B
while(cin>>str1>>str2)就行了,多简单,不得不吐槽,九度的OJ真奇葩 题目描述: 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号", ...
随机推荐
- iOS组件化开发· 什么是组件化
越来越多公司,开始了组件化,你还要等到什么时候...... 说到开发模式,我们最熟知的开发模式 MVC 或者最近比较热门的MVVM.但是我今天说的组件化的开发,其实MVC不是一类的.它其实是····· ...
- 严重:The web application [web01] appears to have started a thread named ...
Tomcat报错 严重:The web application [web01] appears to have started a thread named [PooledThread-1] but ...
- siege4压测脚本示例
agent="Siege 1.0"rcconfig="/opt/siege4.0/etc/siegerc"concurrent=$1repet=$2url=&q ...
- vue+element ui项目总结点(六)table编辑当前行、删除当前行、新增、合计操作
具体属性方法参考官方网站:http://element-cn.eleme.io/#/zh-CN/component/installation <template> <div clas ...
- codevs 5462 HYY迎亲I
时间限制: 1 s 空间限制: 256000 KB 题目等级 : 青铜 Bronze 题目描述 Description HYY要娶山那头的JCH,可毕竟是山路,十分崎岖,他又十分的单(bai)纯(ch ...
- 【iOS】UITableview cell 顶部空白的n种设置方法
我知道没人会主动设置这个东西,但是大家一定都遇到过这个问题,下面总结下可能是哪些情况: 1, self.automaticallyAdjustsScrollViewInsets = NO; 这个应该 ...
- ubuntu 14.04 安装mysql,并配置远程连接和中文乱码
1. 安装MySQL的jar root@computer-PowerEdge-T30:~# sudo apt-get install mysql-server mysql-client在本次安装中,根 ...
- Java异常处理:如何写出“正确”但被编译器认为有语法错误的程序
文章的标题看似自相矛盾,然而我在"正确"二字上打了引号.我们来看一个例子,关于Java异常处理(Exception Handling)的一些知识点. 看下面这段程序.方法pleas ...
- java 核心技术卷一笔记 6 .2.3 接口 lambda 表达式 内部类
6.2.3 对象克隆 Cloneable 接口,这个接口指示一个类提供了一个安全的clone方法.(稍作了解) 为一个对象引用的变量建立副本时,原变量和副本都是同一个对象的引用,任何一个变量改变都 ...
- vue实现微信分享朋友圈和朋友功能
vue实现微信分享朋友圈和朋友功能 A-A+ haibao 2018-10-25 11 21 6.2 k 百度已收录 前端开发 温馨提示:本文共3536个字,读完预计9分钟. 这两天在开发 ...