Description

BZOJ只是扔了个下载链接

Solution

设$f[x][i]$表示$x$点选中$i$个黑点的最小连通块。

设$g[x][i]$表示$x$点选中$i$个黑点的最大连通块。

转移非常明显。处理出每个情况的上下界之后差分一下$O(1)$回答询问即可。

卡空间所以要用$short$。 第二次$INF$开大了……应该多上点心了……

Code

 #include<iostream>
#include<cstring>
#include<cstdio>
#define N (5009)
using namespace std; struct Edge{int to,next;}edge[N<<];
int n,u,v,T,q,INF=1e4,size[N],b[N];
short f[N][N],g[N][N],tmpf[N],tmpg[N],ans[N][N];
int head[N],num_edge; void add(int u,int v)
{
edge[++num_edge].to=v;
edge[num_edge].next=head[u];
head[u]=num_edge;
} void Dfs(int x,int fa)
{
size[x]=;
for (int i=; i<=n; ++i)
f[x][i]=INF,g[x][i]=-INF;
f[x][b[x]]=g[x][b[x]]=;
for (int i=head[x]; i; i=edge[i].next)
if (edge[i].to!=fa)
{
int to=edge[i].to;
Dfs(to,x);
for (int j=; j<=size[x]+size[to]; ++j)
tmpf[j]=INF,tmpg[j]=-INF;
for (int j=; j<=size[x]; ++j)
for (int k=; k<=size[to]; ++k)
{
tmpf[j+k]=min((int)tmpf[j+k],(int)f[x][j]+f[to][k]);
tmpg[j+k]=max((int)tmpg[j+k],(int)g[x][j]+g[to][k]);
}
size[x]+=size[to];
for (int j=; j<=size[x]; ++j)
{
f[x][j]=min(f[x][j],tmpf[j]);
g[x][j]=max(g[x][j],tmpg[j]);
}
}
for (int i=; i<=size[x]; ++i)
if (f[x][i]<INF)
ans[f[x][i]][i]++,ans[g[x][i]+][i]--;
} int main()
{
scanf("%d",&T);
while (T--)
{
memset(ans,,sizeof(ans));
memset(head,,sizeof(head));
num_edge=;
scanf("%d%d",&n,&q);
for (int i=; i<=n-; ++i)
scanf("%d%d",&u,&v),add(u,v),add(v,u);
for (int i=; i<=n; ++i)
scanf("%d",&b[i]);
Dfs(,);
for (int i=; i<=n; ++i)
for (int j=; j<=n; ++j)
ans[i][j]+=ans[i-][j];
for (int i=; i<=q; ++i)
{
scanf("%d%d",&u,&v);
if (ans[u][v]) puts("YES");
else puts("NO");
}
puts("");
}
}

BZOJ5072:[Lydsy1710月赛]小A的树(树形DP)的更多相关文章

  1. bzoj 5072 [Lydsy1710月赛]小A的树——树形dp

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5072 发现对于每个子树,黑点个数确定时,连通块的大小取值范围一定是一段区间:所以考虑只最小化 ...

  2. 【BZOJ5072】[Lydsy十月月赛]小A的树 树形DP

    [BZOJ5072][Lydsy十月月赛]小A的树 题解:考虑我们从一个联通块中替换掉一个点,导致黑点数量的变化最多为1.所以我们考虑维护对于所有的x,y的最大值和最小值是多少.如果询问的y在最大值和 ...

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

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

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

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

  5. 【bzoj5072】[Lydsy十月月赛]小A的树 树形背包dp

    题解: 比较好想 首先注意到如果最暴力的做法复杂度无法接受 而5000的范围基本是n^2做法了 只使用已经遍历过的点数目和当前子树中的点数目转移我们知道复杂度是n^2的 于是大胆猜测一波同一个节点为根 ...

  6. [BZOJ 5072][Lydsy1710月赛]小A的树

    传送门 \(\color{green}{solution}\) 嗯...其实我也不太会,所以大胆猜个结论吧(后来证了一下,然后放弃了...). 我们发现如果要使一个联通块的黑点数量为\(k\)的方案最 ...

  7. 小A的树 - 树形DP

    题面 1 9 4 4 1 1 5 1 2 3 2 3 6 6 7 6 8 9 6 0 1 0 1 0 0 1 0 1 3 2 7 3 4 0 9 5 YES YES NO NO 题解 n <= ...

  8. 5073 [Lydsy1710月赛]小A的咒语

    LINK:[Lydsy1710月赛]小A的咒语 每次给定两个串 要求从a串中选出x段拼成B串 能否做到.T组数据. \(n\leq 100000,m\leq 100000,T\leq 10,x\leq ...

  9. 51nod 1353 树 | 树形DP经典题!

    51nod 1353 树 | 树形DP好题! 题面 切断一棵树的任意条边,这棵树会变成一棵森林. 现要求森林中每棵树的节点个数不小于k,求有多少种切法. 数据范围:\(n \le 2000\). 题解 ...

随机推荐

  1. PictureBox控件

    PictureBox控件可以显示来自位图.图标或者元文件,以及来自增强的元文件.JPEG.GIF文件的图形,如果控件不足以显示整幅图像,则裁剪图像以适应控件的大小. Sizemode 图片的大小方式 ...

  2. 一键LNMP文件

    https://lnmp.org/ LNMP相关软件安装目录Nginx 目录: /usr/local/nginx/MySQL 目录 : /usr/local/mysql/MySQL数据库所在目录:/u ...

  3. 配置内核源码make menuconfig时出现 #include CURSES_LOC错误

    配置内核时出现如下错误: liuxin@sunshine-virtual-machine:~/work/nfs_root/system/linux-2.6.22.6$ make menuconfig ...

  4. [PHP] 从PHP 5.6.x 移植到 PHP 7.0.x新特性

    从PHP 5.6.x 移植到 PHP 7.0.x 新特性: 1.标量类型声明 字符串(string), 整数 (int), 浮点数 (float), 布尔值 (bool),callable,array ...

  5. [javaSE] 网络编程(URL)

    获取URL对象,new出来,构造参数:String的路径 调用URL对象的getProtocal()方法,获取协议 调用URL对象的getHost()方法,获取主机 调用URL对象的getPath() ...

  6. python(九):迭代器与生成器

    一.Python的迭代协议 迭代器是访问集合内元素的一种方式.它只能依次访问集合内元素.其特点是惰性执行. collection.abc的迭代协议提供了两个概念:可迭代对象和迭代器.可迭代对象:必须具 ...

  7. 设计模式入门,策略模式,c++代码实现

    // test01.cpp : Defines the entry point for the console application.////第一章,设计模式入门,策略模式#include &quo ...

  8. 一文看懂大数据的技术生态圈,Hadoop,hive,spark都有了

    一文看懂大数据的技术生态圈,Hadoop,hive,spark都有了 转载: 大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的.你可以把它 ...

  9. HttpServletRequest 各种方法总结(转)

    HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息. 转自: ...

  10. Java内存区域与虚拟机类加载机制

    一.Java运行时数据区域 1.程序计数器 “线程私有”的内存,是一个较小的内存空间,它可以看做当前线程所执行的字节码的行号指示器.Java虚拟机规范中唯一一个没有OutOfMemoryError情况 ...