#include<bits/stdc++.h>
using namespace std;
struct point
{
bool a;
int b,ans;
vector <int> s;
}yg[100000];
int n;
bool cmp(int x,int y)
{
return yg[x].ans+yg[x].b < yg[y].ans+yg[y].b;
}
void dfs(int x)
{
yg[x].ans = 0;
int num = 0;
for(auto i:yg[x].s)
{
if(yg[i].a)
{
num++;
}
dfs(i);
}
sort(yg[x].s.begin(),yg[x].s.end(),cmp);
for(auto i:yg[x].s)
{
if(num*2==yg[x].s.size())
{
break;
}
if(yg[i].a==(num*2<yg[x].s.size()))
{
yg[x].ans+=yg[i].ans+yg[i].b;
num += yg[i].a?1:-1;
}
}
}
int main()
{
freopen("vote.in","r",stdin);
freopen("vote.out","w",stdout);
cin >> n;
for(int i = 1;i <= n;i++)
{
int p;
cin >> p >> yg[i].a >> yg[i].b;
yg[p].s.push_back(i);
}
dfs(1);
for(int i = 1;i <= n;i++)
{
cout << yg[i].ans << endl;
}
return 0;
}
题面?链接?数据?
帮你补上