早教吧 育儿知识 作业答案 考试题库 百科 知识分享

平均树高★实验任务我们知道,在图论中,有根树中的节点可以根据到根的距离分层(假设根为第一层).一棵有根数的层数叫做这棵树的高度.现在我们定义一棵树的平均高度为该树的所有子树(包

题目详情
平均树高
★实验任务
我们知道,在图论中,有根树中的节点可以根据到根的距离分层(假设根为第一层).一
棵有根数的层数叫做这棵树的高度.现在我们定义一棵树的平均高度为该树的所有子树(包
括自身)的高度的平均数.那么现在给出一颗树,你能求出该树的平均高度吗?
★数据输入
输入第一行一个正整数
N (2 < N < 10000) 表示该树有
N个结点.
接下来
N-1行,每行两个整数
ab,表示
a是
b的父亲结点,数据保证所给的是一棵树,
结点的编号为
1到
N.
★数据输出
输出一行一个整数,表示该树的平均高度,结果保留
3位小数.
输入示例 输出示例
7 1.857
1 2
1 3
1 4
3 5
3 6
6 7
▼优质解答
答案和解析
#define N 10010
#define CL(X) memset(X,0,sizeof(X))
#define for if(0);else for
#include
#include
#include
#include
using namespace std;
int h[N];
int in[N];
vector a[N];
int root;
int n;
int max(int a,int b)
{
return a>b?a:b;
}
int dfs(int x)
{
if(h[x]!=0) return h[x];
else
{
int _max=1;
for(int i=0;i {
_max=max(_max,dfs(a[x][i])+1);
}
h[x]=_max;
return h[x];
}
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
CL(h);
CL(in);
for(int i=0;i<=n;i++) a[i].clear();
for(int i=0;i {
int ta,tb;
scanf("%d %d",&ta,&tb);
a[ta].push_back(tb);
in[tb]++;
}
for(int i=1;i<=n;i++) if(in[i]==0) {root=i;break;}
dfs(root);
double ans=0;
for(int i=1;i<=n;i++) ans+=h[i];
ans/=n;
printf("%.3lf\n",ans);
}
return 0;
}
看了平均树高★实验任务我们知道,在...的网友还看了以下:

如何成为超凡脱俗,让人赞赏的人。我18岁,我给人的第一印象就是很冷漠。但认识我后和我关系到位的都认  2020-05-13 …

英语翻译帮用英语翻译一下!我有一个梦想,但是它真的真的很难实现,但我知道,努力就会成功,加油,为梦  2020-05-15 …

请大家帮我把下面的这句中文翻译成英文,谢谢!请大家帮我把这句中文翻译成英文,谢谢!她是我以前的女朋  2020-05-23 …

下面的语段中有两个病句,请改正拜托各位大神1.在过去的这些天里,我们经历了太多的感动,太多的震撼2  2020-06-07 …

大师的这段经历非常重要,但流传的说法不一,而所有的当事人,知情人都已去世,我们斟酌以后拟采用大师儿  2020-06-21 …

背单词的方法我在英国.每天都要狂写好几遍才可以记住单词,别人都让我用方法背单词.可我这些都试过了,  2020-06-22 …

英语翻译哪怕全世界的人都恨你,都相信你坏,只要你自己问心无愧,你也不会没有朋友的.↑↑这句话是夏洛  2020-06-27 …

可以用什么成语来形容?老舍的《草原》中的这次,我看到了草原,那里的天比别处的更可爱,空气是那么清新  2020-07-25 …

四氧化三铁是什么味道的?这个...前几天同学把我的美工刀拿去玩了一天,还回来的时候刀片上都是鱼腥味.  2020-11-21 …

作文提纲怎么写?以“家园”和“探索”为话题,写两篇提纲,粗略点不要紧,关键是要写啊!写的好的我可以给  2020-12-28 …