Description

题库链接

给你 \(n\) 个节点的一棵树,点分黑白。 \(q\) 组询问,每次询问类似于“是否存在树中 \(x\) 个点的连通块恰有 \(y\) 个黑点”。 \(t\) 组数据。

\(1\leq t\leq 5,1\leq n\leq 5000,q\leq 10^5\)

Solution

由于询问比较多,容易猜到一个结论,就是 \(x\) 个点的连通块能取到黑点的个数一定是完整的一段区间。

就是只要 \(y\geq\) \(x\) 个点的连通块黑点个数的下界,且 \(y\leq\) \(x\) 个点的连通块黑点个数的上界,那么就满足题设条件。

具体证明,大概就是在 \(x\) 个点的连通块中删去边界一个点,再加上另一个不在连通块内的点这样黑点增量(减量)是不大于 \(1\) 的,那么就一定能取到一整段区间内的数。

可以用 \(O(n^2)\) 的树上背包来预处理出这个上界下界。最后 \(O(1)\) 回答询问即可。

Code

#include <bits/stdc++.h>
using namespace std;
const int N = 5000+5; int n, q, d[N], u, v, f[N][N], g[N][N], size[N];
struct tt {int to, next; }edge[N<<1];
int path[N], top; void dfs(int u, int fa) {
if (d[u] == 1) f[u][1] = g[u][1] = 1;
else f[u][1] = g[u][1] = 0;
size[u] = 1;
for (int i = path[u], v; ~i; i = edge[i].next)
if ((v = edge[i].to) != fa) {
dfs(v, u);
for (int p = size[u]; p; p--)
for (int q = size[v]; q; q--)
f[u][p+q] = min(f[u][p+q], f[u][p]+f[v][q]),
g[u][p+q] = max(g[u][p+q], g[u][p]+g[v][q]);
size[u] += size[v];
}
for (int i = 1; i <= size[u]; i++)
f[0][i] = min(f[0][i], f[u][i]), g[0][i] = max(g[0][i], g[u][i]);
}
void add(int u, int v) {edge[++top] = (tt){v, path[u]}; path[u] = top; }
void work() {
memset(path, top = -1, sizeof(path));
scanf("%d%d", &n, &q);
for (int i = 1; i < n; i++) scanf("%d%d", &u, &v), add(u, v), add(v, u);
for (int i = 1; i <= n; i++) scanf("%d", &d[i]);
memset(f, 127/3, sizeof(f)), memset(g, 0, sizeof(g));
dfs(1, 0);
while (q--) {
scanf("%d%d", &u, &v);
if (f[0][u] <= v && v <= g[0][u]) puts("YES");
else puts("NO");
}
puts("");
}
int main() {int t; cin >> t; while (t--) work(); return 0; }

[BZOJ 5072]小A的树的更多相关文章

  1. bzoj 5072 小A的树 —— 树形DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5072 由于对于一个子树,固定有 j 个黑点,连通块大小是一个连续的范围: 所以记 f[i][ ...

  2. bzoj 4031: 小Z的房间 矩阵树定理

    bzoj 4031: 小Z的房间 矩阵树定理 题目: 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时 ...

  3. bzoj 1901: Zju2112 Dynamic Rankings(树套树)

    1901: Zju2112 Dynamic Rankings 经典的带改动求区间第k小值问题 树套树模板,我是用的线段树套splay实现的,并且用的数组模拟的,所以可能空间略大,bzoj过了,zoj过 ...

  4. BZOJ 5028 小z的加油站

    bzoj链接 Time limit 10000 ms Memory limit 262144 kB OS Linux 感想 树上动态gcd的第二题也好了. [x] BZOJ 2257 [JSOI200 ...

  5. 小机房的树 codevs 2370

    2370 小机房的树  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 小机房有棵焕狗种的树 ...

  6. 【codevs2370】小机房的树 LCA 倍增

    2370 小机房的树  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0 ...

  7. Codevs 2370 小机房的树

    2370 小机房的树 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为 ...

  8. 牛客挑战赛30 小G砍树 树形dp

    小G砍树 dfs两次, dp出每个点作为最后一个点的方案数. #include<bits/stdc++.h> #define LL long long #define fi first # ...

  9. bzoj 3437 小p的农场

    bzoj 3437 小p的农场 思路 \(f[i]=min(f[j]+\sum\limits_{k=j+1}^{i}{b[k]*(i-k)}+a[i])\) \(f[i]=min(f[j]+\sum\ ...

随机推荐

  1. ActiveMq 总结(一)

    1. 背景 当前,CORBA.DCOM.RMI等RPC中间件技术已广泛应用于各个领域.但是面对规模和复杂度都越来越高的分布式系统,这些技术也显示出其局限性:(1)同步通信:客户发出调用后,必须等待服务 ...

  2. asp.net-分析器错误消息: 服务器标记的格式不正确。

    大多数都是引号造成的 错误: <asp:LinkButton ID="btnRefund" runat="server" CommandName=&quo ...

  3. C# Task

    Task是一种基于任务的编程模型.它与thread的主要区别是,它更加方便对线程进程调度和获取线程的执行结果. Task类和thread类,前者接收的是Action委托类型,后者接收的是Func委托类 ...

  4. 《JavaScript高级程序设计》3.7 函数

    位于return语句之后的代码不会执行; return语句也可以不带有任何返回值. 这种情况下, 函数在停止执行后会返回undefined值. 这种用法一般用在需要提前停止函数执行而又不需要返回值的情 ...

  5. C#通过rdp账密直接打开远程桌面

    思路是首先新建一个vbs脚本,再创建一个bat脚本,再创建rdp文件,运行顺序是vbs->bat->rdp.rdp文件里面包含远程电脑的账密和其它信息,这样就可以不用再输入账密,而在程序里 ...

  6. Java反编译工具Luyten介绍

    比较精准的一个java反编译工具,笔者有时候用jd-gui反编译不出来的class用luyten都可以反编译出来. 官方网站:https://github.com/deathmarine/Luyten ...

  7. linux系统下安装Jenkins

    1.首先准备java环境,安装JDK 2.部署jenkins wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redha ...

  8. NRF52840相对于之前的NRF52系列、NRF51系列增加了什么功能

    现在广大客户的蓝牙采用NORDIC越来越多了,NORDIC一直在不断进行技术改进更好的满足市场需求 推出了新款NRF52840.NRF52840更为先进些,支持的功能也多点,比如IEEE802.15. ...

  9. 关于ManyToMany的一点补充

    1.先看model的定义 user表: class User(models.Model): """ 用户表 """ username = m ...

  10. nodejs 像 C 语言那样输出当前代码的行数

    http://stackoverflow.com/questions/11386492/accessing-line-number-in-v8-javascript-chrome-node-js Ob ...