九度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,其表示形式是:从个位开始,每三位数用逗号", ...
随机推荐
- 【NumPy学习指南】day4 多维数组的切片和索引
ndarray支持在多维数组上的切片操作.为了方便起见,我们可以用一个省略号(...)来 表示遍历剩下的维度. (1) 举例来说,我们先用arange函数创建一个数组并改变其维度,使之变成一个三维数组 ...
- 快速排序的一种Java实现
快速排序是笔试和面试中很常见的一个考点.快速排序是冒泡排序的升级版,时间复杂度比冒泡排序要小得多.除此之外,快速排序是不稳定的,冒泡排序是稳定的. 1.原理 (1)在数据集之中,选择一个元素作为&qu ...
- Java静态方法不能被覆盖
// 静态方法不能被覆盖 /*class Super{ static String name(){ return "mother"; } } ...
- get和post请求及进程和线程及cookie和session的区别
get和post请求及进程和线程及cookie和session的区别 1.get和post请求的区别 get请求是指向服务器进行获取查询数据的请求,post请求指向服务器提交数据的请求. get请求如 ...
- 不同版本的 Tomcat 设置用户名密码 的方法
Tomcat : tomcat根目录\conf\tomcat-users.xml,找到 <tomcat-users> 标签,在后面添加 <user username="ad ...
- 远程文件拷贝(fastcopy为例)
远程地址格式如下:\\IP地址\磁盘符号$\文件夹名称(如:127.0.0.1\\c$\\image)拷贝了image文件夹下面的所有文件,但是如果远程机器有密码的话要先在本机先输入远程的目标地址然后 ...
- FaceBook pop 动画开源框架使用教程说明
https://github.com/facebook/pop Pop is an extensible animation engine for iOS and OS X. In addition ...
- 阿里云apt-get安装包时Err:2 http://mirrors.cloud.aliyuncs.com/ubuntu xenial-security/main amd64 git amd64 1:2.7.4-0ubuntu1.2 404 Not Found
新部署的云服务器出现如下错误: root@iZj6cbjalvhsw0fhndmm5xZ:~# apt-get install git Reading package lists... Done Bu ...
- urllib基础-构造请求对象,设置用户代理User-Agent
有的网页具有一些反爬机制,如:需要浏览器请求头中的User-Agent.User-Agent类似浏览器的身份证. 程序中不设置User-Agent.默认是Python-urllib/3.5.这样网站就 ...
- 第三届上海市大学生网络安全大赛wp&学习
wp 0x00 p200 先分析了程序关键的数据结构 分析程序逻辑,在free堆块的时候没有清空指针,造成悬挂指针,并且程序中给了system('/bin/sh'),可以利用uaf 脚本如下: 1.先 ...