九度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,其表示形式是:从个位开始,每三位数用逗号", ...
随机推荐
- How To Install and Secure phpMyAdmin on Ubuntu 12.04(MySQL图形管理)
原文参考链接:https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-phpmyadmin-on-ubun ...
- Linux OpenGL 实践篇-15-图像数据操作
OpenGL图像数据操作 之前的实践中,我们在着色器中的输入输出都是比较固定的.比如在顶点或片元着色器中,顶点属性的输入和帧缓存的颜色值:虽然我们可以通过纹理或者纹理缓存对象(TBO)来读取任意的内存 ...
- ssh复制remote
rsync rsync localdirectory username@10.211.55.4:/home/username/Downloads/localdirectory -r
- urllib基础-利用网站结构爬取网页-百度搜索
有的时候爬取网页,可以利用网站额结构特点爬取网页 在百度搜索框中输入搜索内容,单击搜索,浏览器会发送一个带有参数的url请求.尝试删除其中的一些参数,只剩下wd这个参数.发现wd是搜索内容.这样程序可 ...
- Luogu P1782 旅行商的背包
题目传送门 卡常背包果然名不虚传 算法主体就是两种背包分开跑,先跑多重背包,再跑奇货 不知道为什么,这题二进制拆分好像要比单调队列优化快一些 然后这题毒瘤的地方就出来了: 如果一件物品的体积\(\ti ...
- 用Kotlin开发android平台语音识别,语义理解应用(olamisdk)
Kotlin是由JetBrains创建的基于JVM的编程语言,IntelliJ正是JetBrains的杰作,而android Studio是 基于IntelliJ修改而来的.Kotlin是一门包含很多 ...
- HTML防止重复提交
1 在你的表单页里HEAD区加入这段代码: <META HTTP-EQUIV="pragma" CONTENT="no-cache"> <ME ...
- C语言数据类型_02
C语言数据类型:
- MYSQL数据库SQL语句集锦
*特别说明:FILED代表数据表字段,CONDITIONS代表where之后的条件,TABLENAME代表数据表名 []中括号内的内容代表 可有可无. 创建数据库 create database ...
- Pycharm快捷键及Python常用转义符
不管是windows.xshell或者pycharm,学会使用快捷键都会使学习工作达到事半功倍的效果.这篇博客收集了部分常用的pycharm快捷键,分享给大家,希望对大家有用. 1. 常用快捷键 Py ...