投票,题目ID:19263,一直输出0

#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;
}

题面?链接?数据?

帮你补上
image
image
image
image