早教吧作业答案频道 -->数学-->
平均树高★实验任务我们知道,在图论中,有根树中的节点可以根据到根的距离分层(假设根为第一层).一棵有根数的层数叫做这棵树的高度.现在我们定义一棵树的平均高度为该树的所有子树(包
题目详情
平均树高
★实验任务
我们知道,在图论中,有根树中的节点可以根据到根的距离分层(假设根为第一层).一
棵有根数的层数叫做这棵树的高度.现在我们定义一棵树的平均高度为该树的所有子树(包
括自身)的高度的平均数.那么现在给出一颗树,你能求出该树的平均高度吗?
★数据输入
输入第一行一个正整数
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
★实验任务
我们知道,在图论中,有根树中的节点可以根据到根的距离分层(假设根为第一层).一
棵有根数的层数叫做这棵树的高度.现在我们定义一棵树的平均高度为该树的所有子树(包
括自身)的高度的平均数.那么现在给出一颗树,你能求出该树的平均高度吗?
★数据输入
输入第一行一个正整数
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;
}
#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
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;
}
看了平均树高★实验任务我们知道,在...的网友还看了以下:
如图公园里有一株古树假设他的树干为圆形工作人员想在距他1m处围上一圈护栏,现在以测得古树根部的周长 2020-04-07 …
急写英语作文120词英语作文:假如你是李华,你的美国网友linda想在暑假期间独自来中国旅行,但她 2020-05-15 …
求名师修改一下诗,急啊、下面的假如我是一棵树假如我是一棵树,我会给大地万物复苏.假如我是一棵树,我 2020-05-16 …
在一棵树中,哪一个节点没有前驱节点?A.分支节点B.叶节点C.树根节点D.空节点 2020-05-23 …
在一棵树中,哪一个结点没有前驱结点?A.分支结点B.叶结点C.树根结点D.空结点 2020-05-24 …
什么是叶子节点,根节点?(7)某二叉树中有n个度为2的结点,则该二叉树中的叶子结点数为(A)A)n 2020-06-16 …
将下列植物和与之相关的结构特点连线银杏----无根、无茎、无叶水绵----无花、种子裸露桃树--- 2020-06-21 …
近日获得一根树枝,颜色棕偏红,上面有白色的点点(不是虫卵)这是什么树的树枝? 2020-11-27 …
假如你是李明.请根据下列要点提示,用英文给你的笔友刘伟写一封信,介绍你的学习情况.要点1.你...假 2021-01-04 …
平均树高★实验任务我们知道,在图论中,有根树中的节点可以根据到根的距离分层(假设根为第一层).一棵有 2021-01-05 …