cf#ecr7- E - Ants in Leaves-暴力+贪心

http://codeforces.com/contest/622/problem/E


题意:

给出一棵树,n个节点,根为1,每个叶子上有一只蚂蚁,蚂蚁同时往根爬,每步移动1单位时间,除了节点1,别的节点每一时间只能存在1只蚂蚁。

 求所有蚂蚁到根节点的最短时间。


贪心,考虑每个子树,求子树上所有蚂蚁到根的最长时间。

对每个子树,dfs处理出每个叶子节点的深度,并存起来。

然后遍历每个叶子节点,每个叶子到达根节点的最早时间是,max(自身深度,上一个叶子到达根的时间+1)



答案便是所有叶子中耗时最长的那个。。。



#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
#define lson l , m , rt << 1
#define rson m + 1 , r , rt << 1 | 1
const int inf=2147483647;
const double pi=acos(-1.0);
double eps=0.000001;
int min(int a,int b)
{return a > sb(500000);
struct node
{
	int x,h;
	node(int a=0,int b=0){ x=a;h=b;}
	bool operator <(const node &b)
	{
		return htmp;
int vis[5+500000];
void dfs(int x,int cur)//给子树标深度,并把叶子放入vector
{
	if (sb[x].size()==1)
	tmp.push_back(node(x,cur ));
	vis[x]=1;
	int i;
	for (i=0;i>n ;
	 int i,x,y,j;
	 for (i=1;i<=n-1;i++)
	 {
		 scanf("%d%d",&x,&y);
		 sb[x].push_back(y);
		 sb[y].push_back(x);
	 } 
 
	int ans=0;
	 for (i=0;i


你可能感兴趣的:(搜索,贪心,暴力,CF)