40分
查看原帖
40分
273056
splendid_followers楼主2022/6/10 17:37

和题解的思路差不多,,吧?

#include<bits/stdc++.h>
using namespace std;
struct node
{
	int w,l,r;
}s[100000];
int n,f[150],size[150];
int find_root(int x,int deep)//求以x为根的子树长度 
{
	int l=0,r=0;//左右子树 
	if(s[x].l!=0)l=find_root(s[x].l,deep+1)+deep*s[s[x].l].w;
	if(s[x].r!=0)r=find_root(s[x].r,deep+1)+deep*s[s[x].r].w;
	return l+r;
}
int find_node(int i,int j)//求所有结点到x的距离 
{
	return f[j]=2*f[i]-3*size[j]-2*s[j].w+s[i].w;
}
int main()
{
	cin>>n;for(int i=1;i<=n;i++)
	{
		cin>>s[i].w>>s[i].l>>s[i].r;
	}
	for(int i=1;i<=n;i++)size[i]=find_root(i,1);
	f[1]=size[1];
	for(int i=1;i<=n;i++)
	{
		if(s[i].l!=0)f[s[i].l]=find_node(i,s[i].l);
		if(s[i].r!=0)f[s[i].r]=find_node(i,s[i].r);
	}
	int mix=f[1],mi=1;
	for(int i=1;i<=n;i++)
	{
		if(f[i]<mix&&f[i]>0)mix=f[i],mi=i;
	}
	cout<<mix;//<<" "<<mi;
}
2022/6/10 17:37
加载中...