https://codeforces.com/contest/1153/problem/D

题意

一颗有n个点的数,每个点a[i]为0代表取子节点的最小,1代表取最大,然后假设树上存在k个叶子,问你如何将1~k分配给叶子节点使得根节点最大

题解

  • 实际上最后只有一个值能到达根,我们需要计算没用的叶子节点数量
  • min:相当于将子节点叶子数量相加
  • max:相当于将子节点叶子数量取最小
  • ans=叶子数-sz[1]+1

代码

#include<bits/stdc++.h>
#define MAXN 300005
using namespace std;
vector<int>G[MAXN];
int a[MAXN],Sz[MAXN],n,v,lt;
void dfs(int u,int fa){
int son=0;
for(auto v:G[u]){
if(fa==v)continue;
son++;
dfs(v,u);
Sz[u]+=Sz[v];
}
if(son==0){lt++;Sz[u]=1;return;}
if(a[u]==1){
Sz[u]=n;
for(auto v:G[u]){
if(fa==v)continue;
Sz[u]=min(Sz[v],Sz[u]);
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
for(int u=2;u<=n;u++){
scanf("%d",&v);
G[u].push_back(v);
G[v].push_back(u);
}
dfs(1,0);
cout<<lt-Sz[1]+1;
}

最新文章

  1. MPAndroidChart 3.0——LineChart(折线图)
  2. Filter体现职责链模式
  3. java中equals和“==”补充
  4. UVA 10090 Marbles 扩展欧几里得
  5. 如何解压.bz2文件包
  6. css常用效果总结
  7. SQL初级
  8. leetcode 135. Candy ----- java
  9. C#&amp;java重学笔记(泛型)
  10. GCC警告选项例解
  11. [Tommas] SQL 中 WITH AS 的用法
  12. Tomcat Server 原理
  13. oracle11g创建新的用户和改动最大连接数
  14. JS跨域:1.解决方案之-SpringMVC拦截器
  15. rem计算
  16. dubbo实现示例
  17. io输出流变为输入流
  18. Java学习--编译器javac
  19. php语言介绍分析
  20. 深入分析Java Web技术内幕 修订版 pdf

热门文章

  1. 解决WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
  2. 记一次Lua语言中死循环查错
  3. Leetcode 542:01 矩阵 01
  4. Flume笔记
  5. UVA 291 The House Of Santa Claus DFS
  6. JSONObject解析json数据
  7. 奥展项目笔记05--域名、端口、Nginx相关知识笔记
  8. JavaScript ES6新特性介绍
  9. aspx.designer.cs没有自动生成代码(没有自动注册)
  10. [笔记] Git 冲突处理