#include<bits/stdc++.h>
using namespace std;
int n , w,l,r , minroad;
struct tree
{
int value;
int father;
int lson;
int rson;
int deep;
int size;
int road;
}a[201];
void mem()
{
for(int i = 1 ; i<= n ; i++)
{
a[i].father = 0;
a[i].lson = 0;
a[i].rson = 0;
a[i].value = 0;
a[i].size = 1;
a[i].deep = 1;
}
}
void addsize(int i,int v)
{
a[i].size += v;
if(a[i].father !=0)addsize(a[i].father, v);
}
void find(int i)
{
if(a[i].lson == 0)return;
else
{
int l = a[i].lson;
a[l].road = a[i].road+a[1].size-a[l].size-a[l].size;
if(minroad > a[l].road)minroad = a[l].road;
find(l);
}
if(a[i].rson == 0)return;
else
{
int r = a[i].rson;
a[r].road = a[i].road+a[1].size-a[r].size-a[r].size;
if(minroad > a[r].road)minroad = a[r].road;
find(r);
}
}
int main()
{
cin>>n;
mem();
for(int i = 1 ; i<=n ; i++)
{
cin>>w>>l>>r;
a[i].value = w;
a[i].lson=l;
a[i].rson=r;
a[l].father=i;
a[r].father=i;
a[l].deep=a[i].deep+1;
a[r].deep=a[i].deep+1;
if(l!=0)addsize(i,a[l].value);
if(r!=0)addsize(i,a[r].value);
}
for(int i = 1 ; i<= n ; i++)a[1].road += a[i].value;
minroad = a[1].road;
find(1);
cout<<minroad<<endl;
return 0;
}
求树的重心,很标准,就是会算错,为什么呢(拒绝接受其他思路AC代码)