1,题意.
树根指定为0,找出根的子树节点,保证距离/边数的均值最大.
输出最大值.
2,解决:
对每棵子树做一次dfs即可.
3.实现代码
树根指定为0,找出根的子树节点,保证距离/边数的均值最大.
输出最大值.
2,解决:
对每棵子树做一次dfs即可.
3.实现代码
#include <iostream>
#include <vector>
using namespace std;
const int maxn=1001;
struct node
{
int v;//孩子结点
int d;//到该节点的距离
};
//注意vector在树问题中的使用
vector<node> tree[maxn];
int cnt; //测试数目
int n;//节点个数
double ans;//结果
void dfs(int x,int dep,int sum)
{
if(sum/(double)dep>ans)
ans=sum/(double)dep;
for(int i=0;i<tree[x].size();i++)
dfs(tree[x][i].v,dep+1,sum+tree[x][i].d);
}
int main()
{
freopen("5.16.in","r",stdin);
cout.precision(2);
cout.setf(ios::fixed);
cin>>cnt;
while(cnt--)
{
cin>>n;
for(int i=0;i<n;i++)
tree[i].clear();
int x;
node temp;
for(int i=0;i<n-1;i++)
{
cin>>x;
cin>>temp.v>>temp.d;
tree[x].push_back(temp);
}
ans=0;
for(int i=0;i<tree[0].size();i++)
dfs(tree[0][i].v,1,tree[0][i].d);
cout<<ans<<endl;
}
return 0;
}