首页 > 分享 > 牛客网 桃花(树的直径)

牛客网 桃花(树的直径)

牛客网 桃花(树的直径)

最新推荐文章于 2020-06-22 17:28:39 发布

AIRBOYONE 于 2019-11-15 23:39:25 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

桃花

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

    桃花一簇开无主,可爱深红映浅红。

                                        ——《题百叶桃花》

    桃花长在桃树上,树的每个节点有一个桃花,调皮的HtBest想摘尽可能多的桃花。HtBest有一个魔法棒,摘到树上任意一条链上的所有桃花,由于HtBest法力有限,只能使用一次魔法棒,请求出Htbest最多可以摘到多少个桃花。

输入描述:

第一行有一个正整数n,表示桃树的节点个数。 接下来n-1行,第i行两个正整数ai,bi ,表示桃树上的节点ai,bi之间有一条边。

输出描述:

第一行一个整数,表示HtBest使用一次魔法棒最多可以摘到多少桃花。

示例1

输入

复制

3 1 2 2 3

输出

复制

3

示例2

输入

复制

3 1 2 1 3

输出

复制

3

示例3

输入

复制

4 1 2 2 3 3 4

输出

复制

4

备注:

对于100%的测试数据: 1 ≤ n ≤ 1000000 数据量较大,注意使用更快的输入输出方式。

链接:https://ac.nowcoder.com/acm/problem/17362

题意:求最长的一条线。

题解:树的直径,先随机找一点开始dfs到最远的点,然后从最远的点dfs到另一个最远的点。

#include <stdio.h>

#include <vector>

using namespace std;

vector<int>maps[1000000];

bool book[1000000];

int maxlen,maxnode;

int read()

{

char ch=getchar();

int x=0,f=0;

while(ch<'0' || ch>'9') f|=ch=='-',ch=getchar();

while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();

return x;

}

void dfs(int node,int len)

{

if(len>maxlen)

{

maxlen=len;

maxnode=node;

}

for(int i=0;i<maps[node].size();++i)

{

if(book[maps[node][i]]==false)

{

book[maps[node][i]]=true;

dfs(maps[node][i],len+1);

book[maps[node][i]]=false;

}

}

}

int main()

{

int n,l,r;

n=read();

for(int i=1;i<n;++i)

{

l=read(),r=read();

maps[l].push_back(r);

maps[r].push_back(l);

}

book[1]=true;

dfs(1,1);

book[1]=false;

book[maxnode]=true;

dfs(maxnode,1);

printf("%d",maxlen);

return 0;

}

相关知识

牛客网的国庆自闭7天乐:一些好题
求助,牛客网的采花生题目
牛客14350 苦逼的单身狗
HJ浇花(牛客竞赛 约束差分)
桃花的花语和象征代表是什么
客廳插花風水
属牛适合养什么花
创客汇
桃花的别称,有关桃花的30种雅称有哪些 – 百场汇
桃花的浪漫诗句大全(咏桃花的最著名的诗)

网址: 牛客网 桃花(树的直径) https://m.huajiangbk.com/newsview1407804.html

所属分类:花卉
上一篇: 世界上最大的树直径是多少
下一篇: 花树粗细是说直径还是树围