首页 > 其他 > 详细

[LOJ6175] 「美团 CodeM 初赛 Round B」黑白树[树形DP]

时间:2019-02-02 14:36:10      阅读:200      评论:0      收藏:0      [点我收藏+]

每次从当前的叶子往上DP(每条链上没有染色的深度最大点视为叶子),先看子树里的点能不能染到这个点,染不到就++ans,把这个点的k传上去,能染到的话要chmax(k[fa[u]], k[u]-1)

vint G[MAXN];
int k[MAXN], fa[MAXN], ans;
inline int dfs(int u) {
  int cur = 0;
  for (int i = 0; i < G[u].size(); i++) 
    chmax(cur, dfs(G[u][i]));
  if (cur <= 1) return ++ans, k[u];
  chmax(k[fa[u]], k[u] - 1);
  return cur - 1;
}
int main() {
  int n; 
  scanf("%d", &n);
  lop(i, 2, n) scanf("%d", fa + i), G[fa[i]].pb(i);
  lop1(i, n) in, k[i];
  ans = 0;
  dfs(1);
  out, ans;
  return 0;
}

[LOJ6175] 「美团 CodeM 初赛 Round B」黑白树[树形DP]

原文:https://www.cnblogs.com/storz/p/10348324.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!