bzoj 5072
对于某一大小的连通子图包含的黑点的数目的最大值和最小值都能取到
考虑树形dp
$f[i][j]$ 表示从 $i$ 的子树中选出大小为 $j$ 的联通子图黑点数目的最小值
$g[i][j]$ 表示从 $i$ 的子树中选出大小为 $j$ 的联通子图黑点数目的最大值
树形dp转移
#include <bits/stdc++.h>
const int N = ;
#define gc getchar()
inline int read() {
int x = ; char c = gc;
while(c < '' || c > '') c = gc;
while(c >= '' && c <= '') x = x * + c - '', c = gc;
return x;
}
int head[N], cnt;
struct Node {
int u, v, nxt;
} G[N << ];
int n, q;
int v[N];
int f[N][N], g[N][N];
int size[N];
inline void Add(int u, int v) {G[++ cnt].v = v; G[cnt].nxt = head[u]; head[u] = cnt;}
void Dfs(int x, int fa) {
size[x] = , f[x][] = g[x][] = v[x];
for(int i = head[x]; ~ i; i = G[i].nxt) {
int v = G[i].v;
if(v != fa) {
Dfs(v, x);
for(int j = size[x]; j >= ; j --) {
for(int k = size[v]; k >= ; k --) {
f[x][j + k] = std:: min(f[x][j + k], f[x][j] + f[v][k]);
g[x][j + k] = std:: max(g[x][j + k], g[x][j] + g[v][k]);
}
}
size[x] += size[v];
}
}
for(int i = ; i <= n; i ++) {
f[][i] = std:: min(f[][i], f[x][i]);
g[][i] = std:: max(g[][i], g[x][i]);
}
}
int main() {
int t = read();
for(; t; t --) {
cnt = ;
memset(f, 0x3f, sizeof f);
memset(g, 0xc0, sizeof g);
n = read(); q = read();
for(int i = ; i <= n; i ++) head[i] = -;
for(int i = ; i < n; i ++) {
int u = read(), v = read();
Add(u, v), Add(v, u);
}
for(int i = ; i <= n; i ++) v[i] = read();
Dfs(, );
for(; q; q --) {
int x = read(), y = read();
if(f[][x] <= y && y <= g[][x]) puts("YES");
else puts("NO");
}
puts("");
}
return ;
}
bzoj 5072的更多相关文章
- bzoj 5072 [Lydsy1710月赛]小A的树——树形dp
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5072 发现对于每个子树,黑点个数确定时,连通块的大小取值范围一定是一段区间:所以考虑只最小化 ...
- bzoj 5072 小A的树 —— 树形DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5072 由于对于一个子树,固定有 j 个黑点,连通块大小是一个连续的范围: 所以记 f[i][ ...
- [BZOJ 5072]小A的树
Description 题库链接 给你 \(n\) 个节点的一棵树,点分黑白. \(q\) 组询问,每次询问类似于"是否存在树中 \(x\) 个点的连通块恰有 \(y\) 个黑点" ...
- [BZOJ 5072][Lydsy1710月赛]小A的树
传送门 \(\color{green}{solution}\) 嗯...其实我也不太会,所以大胆猜个结论吧(后来证了一下,然后放弃了...). 我们发现如果要使一个联通块的黑点数量为\(k\)的方案最 ...
- BZOJ 2127: happiness [最小割]
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1815 Solved: 878[Submit][Status][Di ...
- BZOJ 3275: Number
3275: Number Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 874 Solved: 371[Submit][Status][Discus ...
- BZOJ 2879: [Noi2012]美食节
2879: [Noi2012]美食节 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1834 Solved: 969[Submit][Status] ...
- bzoj 4610 Ceiling Functi
bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...
- BZOJ 题目整理
bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...
随机推荐
- Intellij IDEA中启动多个微服务--开启Run Dashboard管理
1.找到workspace.xml 2.添加配置 <option name="configurationTypes"> <set> <option v ...
- 本地Pycharm将spark程序发送到远端spark集群进行处理
前言 最近在搞hadoop+spark+python,所以就搭建了一个本地的hadoop环境,基础环境搭建地址hadoop2.7.7 分布式集群安装与配置,spark集群安装并集成到hadoop集群, ...
- maftools | 从头开始绘制发表级oncoplot(瀑布图)
本文首发于微信公众号 **“ 生信补给站 ”** ,期待您的关注!!! 原文链接:https://mp.weixin.qq.com/s/G-0PtaoO6bYuhx_D_Rlrlw 对于组学数据的分析 ...
- 【转载】使用appium遇到的坑
问题 1. error: Failed to start an Appium session, err was: Error: Requested a new session but one was ...
- kafka学习遗留问题
1.ZK在kafka中的作用 2.Kafka支持优先级队列么 未完待续
- logstash+elasticsearch+kibana搭建日志收集分析系统
来源: http://blog.csdn.net/xifeijian/article/details/50829617 日志监控和分析在保障业务稳定运行时,起到了很重要的作用,不过一般情况下日志都分散 ...
- Spring Boot 实现热部署
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring- ...
- Qemu: User mode emulation and Full system emulation
转载: https://wiki.edubuntu.org/UbuntuDevelopment/Ports QEMU QEMU is a processor emulator and supports ...
- EditPlus使用技巧
1.p{$$}*10 按ctrl+E 自动 填写10行 P标签. $表示数字,$$表示2位数... p{b$}*10 2.cltr +j 复制当前行. 3.自动填充开启. --------锚 ...
- Tomcat 项目结构完整解析
本文主要为了对我们平时Tomcat中,我们经常会涉及到的项目结构做一个解析,以便可以一目了然的知道有哪些结构及其作用. 最近一直在思考,怎么样才能一目了然,初步考虑,即用浏览器打开页面,不用往下滑动, ...