早教吧作业答案频道 -->数学-->
平均树高★实验任务我们知道,在图论中,有根树中的节点可以根据到根的距离分层(假设根为第一层).一棵有根数的层数叫做这棵树的高度.现在我们定义一棵树的平均高度为该树的所有子树(包
题目详情
平均树高
★实验任务
我们知道,在图论中,有根树中的节点可以根据到根的距离分层(假设根为第一层).一
棵有根数的层数叫做这棵树的高度.现在我们定义一棵树的平均高度为该树的所有子树(包
括自身)的高度的平均数.那么现在给出一颗树,你能求出该树的平均高度吗?
★数据输入
输入第一行一个正整数
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;
}
看了平均树高★实验任务我们知道,在...的网友还看了以下:
求名师修改一下诗,急啊、下面的假如我是一棵树假如我是一棵树,我会给大地万物复苏.假如我是一棵树,我 2020-05-16 …
假如我是一颗树阅读练习答案假如我是一棵树亲爱的人类:(旁白:如果给我一次能说话的机会,我将感化走在 2020-06-16 …
伊罗奎伊斯宪章(节选)(伊罗奎伊斯族:亚瑟·C.·帕克译)我是德卡纳维达,我和五族①同盟的首领们一 2020-06-27 …
用假如我是我要造句比如假如我是一棵树短文 2020-07-03 …
作文假如我是一棵大树假如我是一棵大树,耳闻目睹自己的“兄弟姐妹”不断倒下,你面对人类,有什么话要说 2020-07-05 …
假如我是一棵树,我希望是松树,因为我可以挺拔……按照这种格式仿写:假如我是()我希望我是()因为我 2020-07-09 …
按下面的格式写出自己对生命的感言假如我是一颗小小的种子,随枫飘落在石缝里,我会()假如我是一株不起 2020-07-12 …
假如我是()我将为母亲()列如:::假如我是一棵大数,我将为母亲洒下一片阴凉 2020-10-30 …
假如我是一棵树,我想对人类说-----初中作文,六百字左右大地上最岳母的颜色是绿色,大地上站立的最大 2020-11-22 …
假若我是一颗小草,那集体就是碧绿的草地;假若我是一棵小树,那集体就是茂密的森林;假若我是一滴水,那集 2020-12-14 …