和题解的思路差不多,,吧?
#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;
}