5814: 无根树

时间限制: 1 Sec  内存限制: 128 MB
提交: 17  解决: 12
[提交][状态][讨论版][命题人:admin]

题目描述

味味最近对树很感兴趣,什么是树呢?树就是有n个点和n-1条边形成的无环连通无向图。
今年2012年浙江省队选拔赛中味味发现了一个树中最长链(就是树当中距离最远的点对)试题,于是她着手对树进行了一些研究和思考。
味味在研究过程中想知道,对于一个无根树,当节点i作为根的时候树的高是多少。所谓树高指的是从根节点出发,到离根节点最远叶子节点所经过的节点的总数,详见输入输出样例。
味味现在遇到了一些烦心的事情,不想再继续思考了,请你帮助她解决这个问题。

输入

输入共N行。第一行为一个正整数N,表示树的节点个数。第2行到第N行里,每行两个用空格隔开的正整数a和b,表示a与b有连边。

输出

输出共N行,第i行表示以节点i为根时的树高。

样例输入

3
1 2
2 3

样例输出

3
2
3

提示

节点1为根时,树的形态如下,此时树高为3。

节点2为根时,树的形态如下,此时树高为2。节点3为根时树的形态同于节点1为根情形。

对于30%的数据有N≤100。
对于60%的数据有N≤300。
对于100%的数据有1≤N≤1000,1≤a,b≤N

来源

第27届宁波市信息学竞赛初中组

技巧:树上任一点到树直径的其中一个端点的距离最远~~

直径:树的直径是指树的最长简单路。

先求直径,然后分别从直径的两端点bfs,对于求得的两个距离取最大值即可。。

求直径:两遍bfs。先随便选一个点做起点bfs找到距它距离最大的点,再从那个点进行bfs,则这次bfs找到的最长路即为树的直径(即这次找到的距它距离最大的点就是直径的另一个端点)

然后分别以直径的两个端点为起点进行bfs遍历树,更新每个节点的距离,然后从两距离中取最大值。

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
vector<int>edge[1005];
queue<int>q;
int n, dep[1005], dep2[1005];
int bfs1()
{memset(dep, -1, sizeof(dep));dep[1]=0;int xx=1;q.push(1);while(!q.empty()){int x=q.front();q.pop();for(int i=0;i<edge[x].size();i++)if(dep[edge[x][i]]<0){dep[edge[x][i]]=dep[x]+1;xx=edge[x][i];q.push(edge[x][i]);}}return xx;
}
int bfs2(int s)
{memset(dep, -1, sizeof(dep));dep[s]=1;int xx=s;q.push(s);while(!q.empty()){int x=q.front();q.pop();for(int i=0;i<edge[x].size();i++)if(dep[edge[x][i]]<0){dep[edge[x][i]]=dep[x]+1;xx=edge[x][i];q.push(edge[x][i]);}} return xx;
}
void bfs3(int s)
{memset(dep2, -1, sizeof(dep2));dep2[s]=1;q.push(s);while(!q.empty()){int x=q.front();q.pop();for(int i=0;i<edge[x].size();i++)if(dep2[edge[x][i]]<0){dep2[edge[x][i]]=dep2[x]+1;q.push(edge[x][i]);if(dep2[edge[x][i]]>dep[edge[x][i]])dep[edge[x][i]]=dep2[edge[x][i]];} }
}
int main()
{scanf("%d", &n);for(int i=1;i<n;i++){int a, b;scanf("%d%d", &a, &b);edge[a].push_back(b);edge[b].push_back(a);}int x=bfs1();   int y=bfs2(x);      bfs3(y);for(int i=1;i<=n;i++)printf("%d\n", dep[i]);return 0;
}
/**************************************************************Problem: 5814User: ldu_reserver201701Language: C++Result: 正确Time:0 msMemory:1288 kb
****************************************************************/

5814:无根树(技巧:树的直径BFS)相关推荐

  1. 【牛客 - 369C】小A与欧拉路(bfs树的直径)

    题干: 链接:https://ac.nowcoder.com/acm/contest/369/C 来源:牛客网 小A给你了一棵树,对于这棵树上的每一条边,你都可以将它复制任意(可以为0)次(即在这条边 ...

  2. 【POJ - 3310】Caterpillar(并查集判树+树的直径求树脊椎(bfs记录路径)+dfs判支链)

    题干: An undirected graph is called a caterpillar if it is connected, has no cycles, and there is a pa ...

  3. HDU4612+Tarjan缩点+BFS求树的直径

    tarjan+缩点+树的直径 题意:给出n个点和m条边的图,存在重边,问加一条边以后,剩下的桥的数量最少为多少. 先tarjan缩点,再在这棵树上求直径.加的边即是连接这条直径的两端. 1 /* 2 ...

  4. 求树的直径+并查集(bfs,dfs都可以)hdu4514

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4514 这题主要是叫我们求出树的直径,在求树的直径之前要先判断一下有没有环 树的直径指的就是一棵树上面距 ...

  5. luogu P4408 [NOI2003]逃学的小孩(树的直径)

    整理的算法模板合集: ACM模板 看了半天的题原来没有告诉你三个点的坐标,不然直接跑最短路即可.要求最长的时间,所以我们要自己找到三个点,而在树中最长的路径也就是树的直径.那么本题就可以简化为:在一棵 ...

  6. 模板 - 树上问题(树的直径、动态查询树的直径、树的重心)

    整理的算法模板合集: ACM模板 目录 一.树的直径 树形DP 两次DFS / BFS(找到直径的两个端点) 二.动态修改树的边权并求每个时刻的直径(线段树) 三.树的重心 一.树的直径 树的直径满足 ...

  7. 【树的直径】解题报告: luogu P3629 [APIO2010]巡逻(树的直径,位运算成对变换,思维)

    题目链接:P3629 [APIO2010]巡逻 首先看题,从1号结点开始,全部遍历并回到1号结点会恰好经过所有的边两次,这样总长度为 2∗(n−1)2*(n-1)2∗(n−1). 那么如果建立一条路以 ...

  8. 0x63.图论 - 树的直径与最近公共祖先

    目录 一.树的直径(Diameter) 1.树形DP求树的直径 2.两次BFS/DFS求树的直径 1.POJ 1985.Cow Marathon(DFS求树的直径模板题) 2.AcWing 350. ...

  9. [Bzoj2282]消防(二分答案+树的直径)

    Description 某个国家有n个城市,这n个城市中任意两个都连通且有唯一一条路径,每条连通两个城市的道路的长度为zi(zi<=1000). 这个国家的人对火焰有超越宇宙的热情,所以这个国家 ...

  10. hdu 4607 Park Visit 求树的直径

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4607 Claire and her little friend, ykwd, are travelli ...

最新文章

  1. 微服务架构实战项目Serverless的持续交付与架构案例
  2. 最新网络工程师考试大纲
  3. python爬取百度百科词条-python简单爬虫爬取百度百科python词条网页
  4. 【Groovy】闭包 Closure ( 闭包类 Closure 简介 | this、owner、delegate 成员赋值及源码分析 )
  5. 《价值50亿的10句话》读后感(学生作业分享)
  6. cmake / target_** 中的 PUBLIC,PRIVATE,INTERFACE
  7. 2017年第八届蓝桥杯C/C++ A组国赛 —— 第一题:平方十位数
  8. 第五届省赛(软件类)真题----Java大学A组答案及解析
  9. 关于Web面试的基础知识点--Javascript(一)
  10. 火出边际的Serverless,你居然还不了解?
  11. 在 win7rc 版下成功安装完 vs2010 beta1
  12. [数分提高]2014-2015-2第1教学周第2次课
  13. 苹果Mac定制化App开发神器:​​​​FileMaker
  14. html答题游戏代码,html5+css3+ajax手机端脑筋急转弯答题游戏代码
  15. oracle 12cora 03113,Oracle12.2 ORA-03113
  16. 移动通信-多径效应,多普勒效应,菲涅尔区,阴影效应,快衰落,慢衰落
  17. Linux内存管理(二):ARMv8 地址转换
  18. 【BIT云计算大作业】基于Spark的K近邻(KNN)查询以及K-mer计数
  19. 用scratch编写打地鼠游戏
  20. amCharts 5.2.2 Crack

热门文章

  1. 正说:SAP HANA大裁员
  2. 影视观影神器:ZY Player for Mac使用教程
  3. 【北京迅为】i.MX6ULL终结者虚拟机安装Ubuntu系统
  4. 一维搜索---黄金分割法
  5. 关于计算机的英语作文初中,computer初中英语作文范文
  6. 如何将CHM文件翻译成中文
  7. 牛人十数年CAD经验分享
  8. 高效记忆/形象记忆(06)英语单词记忆-字母编码
  9. excel 合并单元格筛选
  10. gopher对mysql的利用_[题目]记一次利用gopher的内网mysql盲注