题目链接 Black Nodes in Subgraphs

题目意思就是在一棵树中所有点标记为两种颜色(黑和白)

然后询问是否存在大小为X恰好有Y个黑点的连通块

这题我们可以用树型背包的方法

设$f[i][j][0]$为以$i$为根的子树中大小为$j$的连通块的黑点数目的最小值,该连通块必须经过$i$

$f[i][j][1]$为以$i$为根的子树中大小为$j$的连通块的黑点数目的最大值,该连通块必须经过$i$

那么转移的时候有

$f[x][i + j][0] = min(f[x][i + j][0], f[x][i][0] + f[u][j][0]);$
$f[x][i + j][1] = max(f[x][i + j][1], f[x][i][1] + f[u][j][1]);$

#include <bits/stdc++.h>

using namespace std;

#define rep(i, a, b)	for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i) const int N = 5010;
int f[N][N][2], sz[N];
vector <int> v[N];
int T, n, q;
int c[N], F[N], G[N]; void dfs(int x, int fa){
sz[x] = 1;
if (c[x]) f[x][1][0] = f[x][1][1] = 1;
else f[x][1][0] = f[x][1][1] = 0; for (auto u : v[x]){
if (u == fa) continue;
dfs(u, x);
dec(i, sz[x], 1){
rep(j, 1, sz[u]){
f[x][i + j][0] = min(f[x][i + j][0], f[x][i][0] + f[u][j][0]);
f[x][i + j][1] = max(f[x][i + j][1], f[x][i][1] + f[u][j][1]);
}
} sz[x] += sz[u];
} rep(i, 1, sz[x]){
F[i] = min(F[i], f[x][i][0]);
G[i] = max(G[i], f[x][i][1]);
}
} int main(){ scanf("%d", &T);
while (T--){
scanf("%d%d", &n, &q);
rep(i, 0, n) v[i].clear();
memset(sz, 0, sizeof sz);
rep(i, 0, n) rep(j, 0, n) f[i][j][0] = 1 << 27, f[i][j][1] = 0;
rep(i, 0, n) F[i] = 1 << 27, G[i] = 0; rep(i, 1, n - 1){
int x, y;
scanf("%d%d", &x, &y);
v[x].push_back(y);
v[y].push_back(x);
} rep(i, 1, n) scanf("%d", c + i);
dfs(1, 0); for (; q--; ){
int x, y;
scanf("%d%d", &x, &y);
puts(F[x] <= y && G[x] >= y ? "Yes" : "No");
}
} return 0; }

最新文章

  1. python练手基础
  2. Daily Scrum Meeting ——TenthDay
  3. windows下Emacs的安装与配置
  4. C++头文件的组织
  5. 山寨版Quartz.Net任务统一调度框架
  6. 用自然语言的角度理解JavaScript中的this关键字
  7. jdk 中Runtime之单例模式 学习
  8. jmeter参数化数据(_csvread函数、用户自定义变量等)
  9. ubuntu14.04 Markdown编辑器推荐之Remarkable
  10. nodejs 中使用 mocha + should + jscoverage 生成 单元测试覆盖率报告
  11. 快速搭建vsftp 服务器并配置指定目录
  12. React Native填坑之旅 -- FlatList
  13. 图解script的三种加载方式 异步加载顺序
  14. Objective-C构造方法
  15. Ubuntu 安装第三方工具
  16. socket基础编程-2
  17. Bootstrap3基础 caret 辅助类样式 下拉的小三角
  18. 如何合并ts文件?
  19. SQL优化之count(*),count(列)
  20. java.util.Date与java.sql.Date的关系和转换方法(转)

热门文章

  1. Python学习笔记(一):基础知识
  2. Python 基本数据类型 (二) - 字符串1
  3. ESP8266入门学习笔记1:资料获取
  4. Applied Nonparametric Statistics-lec8
  5. Git for Windows 工具的使用(二)
  6. Linux压缩与归档
  7. JVM执行子系统探究——类文件结构初窥
  8. LA 4094 WonderTeam 构造
  9. HDU 5525 Product 数论
  10. 【Alpha】Scrum Meeting 5-end