题目链接  Black White Tree

树型DP,设$f[i][j]$为以$i$为根的子树中大小为$j$的连通块中可以包含的最小黑点数目。

$g[i][j]$为以$i$为根的子树中大小为$j$的连通块中可以包含的最大黑点数目。

$F[i]$为大小为$i$的连通块中可以包含的最小黑点数目

$G[i]$为大小为$j$的连通块中可以包含的最大黑点数目

做一遍树上DP即可。

#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) typedef long long LL; const int N = 2020; int n;
char s[N];
int a[N];
int T;
vector <int> v[N];
LL ans = 0;
int F[N << 1], G[N << 1];
int f[N][N], g[N][N];
int sz[N]; void dfs(int x, int fa){
sz[x] = 1;
if (a[x]) f[x][1] = g[x][1] = 1;
else f[x][1] = g[x][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] = min(f[x][i + j], f[x][i] + f[u][j]);
g[x][i + j] = max(g[x][i + j], g[x][i] + g[u][j]);
}
} sz[x] += sz[u];
} rep(i, 1, sz[x]){
F[i] = min(F[i], f[x][i]);
G[i] = max(G[i], g[x][i]);
}
} inline int query(int x, int y){
return (F[x + y] <= y && G[x + y] >= y) ? 1 : 0;
} int main(){ scanf("%d", &T);
while (T--){
scanf("%d", &n);
scanf("%s", s + 1);
rep(i, 1, n) a[i] = (int)s[i] - 48; rep(i, 0, n) v[i].clear(); rep(i, 0, n) rep(j, 0, n){
f[i][j] = 1 << 27;
g[i][j] = 0;
} rep(i, 0, n << 1) 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);
} ans = 0;
dfs(1, 0);
rep(i, 0, n) rep(j, 0, n) ans += (LL)(i + 1) * (j + 1) * query(i, j);
printf("%lld\n", ans + 1);
} return 0;
}

HDU 5905 Black White Tree(树型DP)的更多相关文章

  1. POJ 2486 Apple Tree ( 树型DP )

    #include <iostream> #include <cstring> #include <deque> using namespace std; #defi ...

  2. CodeForces 160D - Distance in Tree 树型DP

    题目给了512MB的空间....用dp[k][i]代表以k为起点...往下面走(走直的不打岔)i步能有多少方案....在更新dp[k][i]过程中同时统计答案.. Program: #include& ...

  3. Codeforces 161D Distance in Tree(树型DP)

    题目链接 Distance in Tree $k <= 500$ 这个条件十分重要. 设$f[i][j]$为以$i$为子树,所有后代中相对深度为$j$的结点个数. 状态转移的时候,一个结点的信息 ...

  4. Educational Codeforces Round 52 (Rated for Div. 2) F. Up and Down the Tree 树型DP

    题面 题意:给你一棵树,你起点在1,1也是根节点,你每次可以选择去你子树的某个叶子节点,也可以选择,从叶子节点返回距离不超过k的一个根, 也就是说,你从1开始,向下跳,选择一个叶子(就是没有子树的节点 ...

  5. D. Distance in Tree(树型Dp计数)

    \(其实思路都能想到一点,就是去重这里特别麻烦,没有好的思路.\) \(设dp[i][j]为以i为根深度为j的节点数量\) \(dp[parent][j]=\sum{dp[son][j-1]}\) \ ...

  6. 【POJ 2486】 Apple Tree(树型dp)

    [POJ 2486] Apple Tree(树型dp) Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8981   Acce ...

  7. HDU 5293 Train chain Problem - 树链剖分(树状数组) + 线段树+ 树型dp

    传送门 题目大意: 一颗n个点的树,给出m条链,第i条链的权值是\(w_i\),可以选择若干条不相交的链,求最大权值和. 题目分析: 树型dp: dp[u][0]表示不经过u节点,其子树的最优值,dp ...

  8. HDU_1561_The more, The Better_树型dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1561 The more, The Better Time Limit: 6000/2000 MS (J ...

  9. HDU_1011_Starship Troopers_树型dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1011 Starship Troopers Time Limit: 10000/5000 MS (Jav ...

随机推荐

  1. 洛谷 P1514 引水入城

    这次不说闲话了,直接怼题 这道题用bfs其实并不难想,但比较困难的是怎么解决满足要求时输出蓄水厂的数量.其实就像其他题解说的那样,我们可以用bfs将它转化成一个区间覆盖问题,然后再进行贪心. 首先枚举 ...

  2. Php教程

    第一部:PHP基础部分(131集,发布完毕) 讲html与PHPt基础,PHP环境搭建,与留言本编写. 下载地址:① HTML视频[2014新版] http://pan.baidu.com/s/1ve ...

  3. SVN的配置

    Xcode 是开发人员建立 Mac OS X 应用程序的最快捷方式,也是利用新的苹果电脑公司技术的最简单的途径,而SVN是版本控制工具,那么Xcode SVN又是什么呢?如何配置Xcode SVN? ...

  4. C# 读App.config配置文件[2]: .Net Core框架

    C# 读App.config配置文件[1]:.Net Framework框架 C# 读App.config配置文件[2]: .Net Core框架 网上都是.net framework读取配置文件的方 ...

  5. shell进阶

    shell 中的高级用法 1.if 单重判断 if cmd; then cmd cmd cmd fi 多重判断 单分支 if cmd;then cmd elif cmd fi 双分支 if cmd; ...

  6. rom bist scripts

    rom bist 的input 有rom_content file .校验rom还坏,主要通过signature比较.signature跟rom content file 一一对应的. rom bis ...

  7. SVN 如何提交 SO 库文件

    今天提交代码时候发现,svn add 还是 svn st 均查看不到想要提交的 so 文件. 后来才知道原来是配置文件出了问题,把so文件的提交给屏蔽掉了. 修改步骤如下: 1.Ubuntu 系统,点 ...

  8. python--线程的其他方法

    一 . current_thread的用法 import threading import time from threading import Thread, current_thread def ...

  9. 牛客网暑期ACM多校训练营(第六场) C Generation I(组合数学, 逆元)

    中链接: https://www.nowcoder.com/acm/contest/144/C 题意: 给定n个集合, 要求用n次操作, 第i次操作用1~m中一个数填入 i ~ n个集合中, 集合无序 ...

  10. PYDay10&11&12&13-常用模块:time|datetime|os|sys|pickle|json|xml|shutil|logging|paramiko、configparser、字符串格式化、py自动全局变量、生成器迭代器

    1.py文件自动创建的全局变量 print(vars()) 返回值:{'__name__': '__main__', '__package__': None, '__loader__': <_f ...