Description

Tree is a connected graph without cycles. A leaf of a tree is any vertex connected with exactly one other vertex.

You are given a tree with n vertices and a root in the vertex 1. There is an ant in each leaf of the tree. In one second some ants can simultaneously go to the parent vertex from the vertex they were in. No two ants can be in the same vertex simultaneously
except for the root of the tree.

Find the minimal time required for all ants to be in the root of the tree. Note that at start the ants are only in the leaves of the tree.

Input

The first line contains integer n (2 ≤ n ≤ 5·105) — the number of vertices in the tree.

Each of the next n - 1 lines contains two integers xi, yi (1 ≤ xi, yi ≤ n) — the ends of the i-th edge. It is guaranteed that you are given the correct undirected tree.

Output

Print the only integer t — the minimal time required for all ants to be in the root of the tree.

Sample Input

Input

12

1 2

1 3

1 4

2 5

2 6

3 7

3 8

3 9

8 10

8 11

8 12

Output

6

Input

2

2 1

Output

1

题意:给你一棵节点数为n的树,每一个叶子节点上有一只蚂蚁,每一秒树上的蚂蚁都可以走到父亲节点的位置,但是每一个节点(除根节点)最多只能有一只蚂蚁,问最少需要花费的时间。

思路:一定是先让深度小的蚂蚁走到根节点,因为如果有深度大的比深度低的先走到根节点,那么深度低的可能要先等深度大的,而自己没有走,但如果深度低的先走的话,那么深度大的和小的可以一起往根节点走,这样可以在相同的时间走更多的总步数。所以我们算出根节点下的每一个子树走完所要花的最大时间,然后更新答案就行。那么每一棵子树所要花的时间为t[i]=max(t[i-1]+1,deep[t]),即前面一个走到根节点的时间+1与其深度的较大值。

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<string>
#include<algorithm>
using namespace std;
typedef long long ll;
#define inf 99999999
#define pi acos(-1.0)
#define maxn 500050
vector<int>pos[maxn];
vector<int>::iterator it;
int a[maxn],tot,vis[maxn];
void dfs(int u,int father,int deep)
{
int i,j;
vis[u]=1;
if(pos[u].size()==1){
tot++;a[tot]=deep;
return;
}
for(i=0;i<pos[u].size();i++){
if(father!=pos[u][i] ){
dfs(pos[u][i],u,deep+1 );
}
}
}
int main()
{
int n,m,i,j,ans,c,d,len;
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++)pos[i].clear();
for(i=1;i<=n-1;i++){
scanf("%d%d",&c,&d);
pos[c].push_back(d);
pos[d].push_back(c);
}
len=pos[1].size();
ans=0;
for(i=0;i<len;i++){
tot=0;
dfs(pos[1][i],1,1);
sort(a+1,a+1+tot);
a[0]=0;
for(j=1;j<=tot;j++){
a[j]=max(a[j-1]+1,a[j]);
}
ans=max(ans,a[tot]);
}
printf("%d\n",ans);
}
return 0;
}

codeforces622E Ants in Leaves (dfs)的更多相关文章

  1. codeforces 622E E. Ants in Leaves(贪心+dfs)

    题目链接: E. Ants in Leaves time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  2. Educational Codeforces Round 7 E. Ants in Leaves 贪心

    E. Ants in Leaves 题目连接: http://www.codeforces.com/contest/622/problem/E Description Tree is a connec ...

  3. Educational Codeforces Round 7 - E. Ants in Leaves

    题目链接:http://www.codeforces.com/contest/622/problem/E 题意是给你一棵树,1为根,每个叶子节点有一个蚂蚁,移动到一个邻接节点时间耗费为1,一个节点上不 ...

  4. uva 699 The Falling Leaves dfs实现

    额,刘汝佳小白里面的配套题目. 题目求二叉树同垂直线上结点值的和. 可以用二叉树做,挺水的其实. 尝试使用dfs实现了:开一个大点的数组,根节点为最中间那点,然后读取时就可以进行和的计算了. 代码: ...

  5. codeforces 622E. Ants in Leaves

    题目链接 给一棵有根树, 每个叶子节点上有一只蚂蚁. 在0时刻蚂蚁开始向上爬, 同一时刻, 除了根节点以外, 一个节点上面不能有2个蚂蚁. 问所有的蚂蚁都爬到根节点需要的最短时间. 因为除了根节点, ...

  6. [LeetCode] 872. Leaf-Similar Trees_Easy tag: DFS

    Consider all the leaves of a binary tree.  From left to right order, the values of those leaves form ...

  7. Educational Codeforces Round 7

    622A - Infinite Sequence    20171123 暴力枚举\(n\)在哪个区间即可,时间复杂度为\(O(\sqrt{n})\) #include<stdlib.h> ...

  8. HZNU 2019 Summer training 6 -CodeForces - 622

    A - Infinite Sequence  CodeForces - 622A 题目大意:给你一个这样的数列1,1,2,1,2,3,1,2,3,4,1,2,3,4,5....就是从1~n排列(n++ ...

  9. PAT甲1004 Counting Leaves【dfs】

    1004 Counting Leaves (30 分) A family hierarchy is usually presented by a pedigree tree. Your job is ...

随机推荐

  1. 【Flutter】功能型组件之数据共享

    前言   InheritedWidget提供了一种数据在widget树中从上到下传递.共享的方式,例如在应用的根widget中通过InheritedWidget共享了一个数据,那么便可以在子widge ...

  2. CODING x 腾讯兔小巢,打破研发团队与用户反馈的最后一道壁垒

    任何产品的更新迭代都离不开用户的使用反馈.产品经理日常需要奔走到一线部门了解用户的使用反馈:一线运营或业务团队日常需要向产品经理转述用户的问题场景及催促需求的进度.中间需要消耗大量的精力来进行信息转达 ...

  3. nginx日志详细说明

    Nginx日志主要分为两种:访问日志和错误日志.日志开关在Nginx配置文件(/etc/nginx/nginx.conf)中设置,两种日志都可以选择性关闭,默认都是打开的. 访问日志 访问日志主要记录 ...

  4. Git软件安装过程

    Git程序安装过程 官网: https://git-scm.com/ 下载: https://git-scm.com/downloads 我的操作系统是 Windows + 64位的 https:// ...

  5. mysql中的kill

    show processlist;查看id, 然后 kill id ; 就行了.

  6. 屏蔽每分钟SSH尝试登录超过10次的IP

    屏蔽每分钟SSH尝试登录超过10次的IP 方法1:通过lastb获取登录状态: #!/bin/bash DATE=$(date +"%a %b %e %H:%M") #星期月天时分 ...

  7. 使用 gRPC-UI 调试.NET 5的gPRC服务

    在上一篇文章中,我介绍了gRPCurl一个命令行工具,该工具可用于测试gRPC服务的端点,在本文中,我将向您介绍 gRPC-ui, 它可以作为Web工具使用,有点像Postman,但用于gRPC AP ...

  8. USB过压保护芯片,高输入电压充电器(OVP)

    PW2606B是一种前端过电压和过电流保护装置.它实现了广泛的输入电压范围从2.5VDC到40VDC.过电压阈值可在外部或外部编程设置为内部默认设置.集成功率路径nFET开关的低电阻确保了更好的性能电 ...

  9. Angular入门到精通系列教程(13)- 路由守卫(Route Guards)

    1. 摘要 2. 路由守卫(Route Guards) 2.1. 创建路由守卫 2.2. 控制路由是否可以激活 2.3. 控制路由是否退出(离开) 3. 总结 环境: Angular CLI: 11. ...

  10. ajax异步实现文件分片上传

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...