传送门

\(\color{green}{solution}\)

嗯...其实我也不太会,所以大胆猜个结论吧(后来证了一下,然后放弃了...).
我们发现如果要使一个联通块的黑点数量为\(k\)的方案最少需要\(l\)个点,最多需要\(r\)个点
那么必然能找到一个点数在 \([l,r]\) 的连通块使得包含\(k\)个黑点.
如果我们知道了这个结论, 那么这题就很zz了

这里只讲最多需要多少个点(反之亦然).
我们定义这么一个状态\(f_{i,j}\) 表示以\(i\) 为根的子树有\(j\) 个黑点的方案最多能有多少点 那么就是一个树形背包的事情.
转移就是 \(f_{i, j}\) = \(\max{(f_{i,k}+f_{v, j-k}, k \in 0, j)}\) 其中v是\(i\) 的子树,然后注意下边界

#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define fgr(i,u) for(int i=head[u];i;i=to[i])
#define fd(i,a,b) for(int i=a;i>=b;--i)
const int maxn=5010;
template <typename T> inline bool check_Max(T &x,const T&y) {return x<y?x=y,false:true;}
template <typename T> inline bool check_Min(T &x,const T&y) {return x>y?x=y,false:true;}
inline int gi() {
    int x=0; char o; bool f=true; for(;!isdigit(o=getchar());)if(o=='-')f=false;
    for(;isdigit(o);o=getchar()) x=(x<<1)+(x<<3)+(o&15); return f?x:~x+1;
}
int v[maxn<<1],to[maxn<<1],head[maxn],p;
inline void link(int a,int b){v[++p]=b; to[p]=head[a]; head[a]=p;}
int sz[maxn],col[maxn],Tx[maxn],Tn[maxn],g[maxn][maxn],f[maxn][maxn];
int n,m;
inline void dfs(int u,int pre) {
    sz[u]=1; g[u][1]=f[u][1]=col[u];
    fgr(i,u) if(v[i]^pre) {
        dfs(v[i],u);
        fd(j,sz[u],1) fd(k,sz[v[i]],1)
            check_Max(f[u][j+k],f[u][j]+f[v[i]][k]), check_Min(g[u][j+k],g[u][j]+g[v[i]][k]);
        sz[u]+=sz[v[i]];
    }
    rep(i,1,n) check_Max(Tx[i],f[u][i]),check_Min(Tn[i],g[u][i]);
}
int T;
int main() {
#ifndef ONLINE_JUDGE
    freopen("1.in","r",stdin);
#endif
    T=gi();
    while(T--) {
        n=gi(); m=gi();
        memset(f,0xc0,sizeof(f)); memset(g,0x3f,sizeof(g)); memset(head,0,sizeof(head));
        memset(Tn,0x3f,sizeof(Tn)); memset(Tx,0xc0,sizeof(Tx)); p=0;
        //printf("%d\n",f[0][0]);//de bug
        rep(i,2,n) {int u=gi(),v=gi(); link(u,v); link(v,u);}
        rep(i,1,n) col[i]=gi();
        dfs(1,0);
        rep(i,1,m) {int x=gi(),y=gi(); Tx[x]>=y&&Tn[x]<=y?puts("YES"):puts("NO");}
        puts("");
    }
    return 0;
}

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

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

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

  2. BZOJ5072:[Lydsy1710月赛]小A的树(树形DP)

    Description BZOJ只是扔了个下载链接 Solution 设$f[x][i]$表示$x$点选中$i$个黑点的最小连通块. 设$g[x][i]$表示$x$点选中$i$个黑点的最大连通块. 转 ...

  3. [BZOJ 5074][Lydsy1710月赛]小B的数字

    传送门 \(\color{green}{solution}\) 设 \[b_{i}=2^{w_{i}},sum= \sum_{i=1}^{n}{w_{i}}\] 则对于任意\(a_{i}\)都有 \[ ...

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

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

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

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

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

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

  7. BZOJ.4919.[Lydsy1706月赛]大根堆(线段树合并/启发式合并)

    题目链接 考虑树退化为链的情况,就是求一个最长(严格)上升子序列. 对于树,不同子树间是互不影响的.仿照序列上的LIS,对每个点x维护一个状态集合,即合并其子节点后的集合,然后用val[x]替换掉第一 ...

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

    bzoj description 你有一个\(A\)串和\(B\)串,你需要判断是否可以在\(A\)串中拆出\(x\)个互不相交的子串,使它们按顺序拼在一起可以组成\(B\)串. \(|A|,|B|\ ...

  9. 【bzoj5073】[Lydsy1710月赛]小A的咒语 后缀数组+倍增RMQ+贪心+dp

    题目描述 给出 $A$ 串和 $B$ 串,从 $A$ 串中选出至多 $x$ 个互不重合的段,使得它们按照原顺序拼接后能够得到 $B$ 串.求是否可行.多组数据. $T\le 10$ ,$|A|,|B| ...

随机推荐

  1. 使用c语言实现在linux下的openssl客户端和服务器端编程

    使用c语言实现在linux下的openssl客户端和服务器端编程 摘自:https://www.cnblogs.com/etangyushan/p/3679457.html 前几天组长让我实现一个使用 ...

  2. Java API使用(不断更新中)

    实例1 BigInteger的构造函数public BigInteger (String val, int radix)的使用 上面的构造函数,val是各种进制的字符串,比如二进制的110,八进制的7 ...

  3. JQuery中button提交表单报TypeError: elem[type] is not a function jquery

    错误: TypeError: elem[type] is not a function jquery 解决: 出现这种现象的原因是,提交的表单中,有标签的name,有以submit命名的 name中不 ...

  4. 程序员不常用Linux命令集

    1) 关闭指定网卡,如关闭网卡eth0 ifconfig eth0 down 也可以使用ifdown,通常ifdown是一个指向ifup的软链接,而ifup为一个脚本文件. 2) 命令自启动,如希望机 ...

  5. Linux 基础教程 38-文件下载

    什么是wget     wget用原始帮助里面的英文来讲就是:The non-interactive network downloader,非交互式网络下载器.它支持HTTP.HTTPS.FTP等协议 ...

  6. SDK管理利器——sdkman

    SDK管理利器--sdkman 项目使用java的开发者一定会为新配环境变量而头大,sdkman很好的解决了系统sdk管理的痛点,仅需简单的几行命令就可以完成sdk的安装,更改默认版本.再也不用担心环 ...

  7. weevely入手使用笔记

    -前言 weevely是一款使用python编写的webshell工具,集webshell生成和连接于一身,采用c/s模式构建,可以算作是linux下的一款php菜刀替代工具,具有很好的隐蔽性(生成随 ...

  8. 洛谷P4312 [COCI 2009] OTOCI / 极地旅行社(link-cut-tree)

    题目描述 不久之前,Mirko建立了一个旅行社,名叫“极地之梦”.这家旅行社在北极附近购买了N座冰岛,并且提供观光服务. 当地最受欢迎的当然是帝企鹅了,这些小家伙经常成群结队的游走在各个冰岛之间.Mi ...

  9. 18-11-03 Scrum Meeting 6

    1. 会议照片 2. 工作记录 完成的工作 配置页面 实现中译英选择题和英译中选择题的查询接口 整理文档 完成一个网站的图片爬取 计划的工作 完善配置页面功能 补充另一个网站的图片爬取 代码整理测试 ...

  10. osx上使用'cd'命令跳转到别名(alias)目录

    在mac上使用windows的共享目录时,在terminal中时法使用cd的,会提示"xxx 不是目录",经过一番的查找,发现了Mac Terminal 'cd' to folde ...