题目传送门

  快速的传送门

  慢速的传送门

题目大意

  给定一棵无根树,每个点可以染成黑色或者白色,第$i$叶节点到根的路径上最后有颜色的点必须为$c_{i}$(叶节点可以染色)。问最少要染颜色的点的个数。

  假设有根。显然动态规划。用$f[i][0 / 1]$表示考虑到$i$号点的颜色染成什么,它子树内的点最少要染多少个。

  这里考虑使染色的深度尽量小(相当于钦定根节点染色,没有影响的),方便转移。枚举根节点染什么颜色。如果子树的根的颜色和它一样,那个点就没必要染色了。

  于是愉快地解决了有根的时候。

  对于无根的时候可以枚举根,记录转移的前缀和可以快速通过一条边转移根并计算上面的动态规划值。

  其实根本没必要枚举根。

  因为根在哪最有答案不会改变。

  你可以考虑根所在的一条链。动态规划的某个方案都会钦定每个点都染成某个颜色。

  无论根在哪,一段连续染成相同颜色的点都可以只保留最浅的一个点的染色。

  所以直接找非叶节点动态规划。

Code

 /**
* bzoj
* Problem#1304
* Accepted
* Time: 48ms
* Memory: 1600k
*/
#include <bits/stdc++.h>
using namespace std; const int N = 1e4 + ; int m ,n;
int col[N];
int f[N][];
vector<int> g[N]; inline void init() {
scanf("%d%d", &m, &n);
for (int i = ; i <= n; i++)
scanf("%d", col + i);
for (int i = , u, v; i < m; i++) {
scanf("%d%d", &u, &v);
g[u].push_back(v);
g[v].push_back(u);
}
} void dfs(int p, int fa) {
if (p <= n) {
f[p][col[p]] = ;
f[p][col[p] ^ ] = ;
return ;
}
f[p][] = f[p][] = ;
for (int i = ; i < (signed) g[p].size(); i++) {
int e = g[p][i];
if (e == fa) continue;
dfs(e, p);
f[p][] += min(f[e][] - , f[e][]);
f[p][] += min(f[e][] - , f[e][]);
}
} inline void solve() {
dfs(m, );
printf("%d\n", min(f[m][], f[m][]));
} int main() {
init();
solve();
return ;
}

bzoj 1304 [CQOI 2009] 叶子的染色 - 动态规划的更多相关文章

  1. BZOJ 1304: [CQOI2009]叶子的染色

    1304: [CQOI2009]叶子的染色 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 566  Solved: 358[Submit][Statu ...

  2. 【BZOJ1304】[CQOI2009]叶子的染色(动态规划)

    [BZOJ1304][CQOI2009]叶子的染色(动态规划) 题面 BZOJ 洛谷 题解 很简单. 设\(f[i][0/1/2]\)表示以\(i\)为根的子树中,还有颜色为\(0/1/2\)(\(2 ...

  3. BZOJ1304 CQOI2009 叶子的染色 【树形DP】

    BZOJ1304 CQOI2009 叶子的染色 Description 给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为根,然后给一些结点(根.内部结点和叶子均可)着以黑色或白色.你的着色方 ...

  4. CQOI2009叶子的染色

    叶子的染色 题目描述 给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为根,然后给一些结点(根.内部结点和叶子均可)着以黑色或白色.你的着色方案应该保证根结点到每个叶子的简单路径上都至少包含一 ...

  5. 洛谷 P3155 [CQOI2009]叶子的染色 解题报告

    P3155 [CQOI2009]叶子的染色 题目描述 给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为根,然后给一些结点(根.内部结点和叶子均可)着以黑色或白色.你的着色方案应该保证根结点到 ...

  6. [BZOJ 1879][SDOI 2009]Bill的挑战 题解(状压DP)

    [BZOJ 1879][SDOI 2009]Bill的挑战 Description Solution 1.考虑状压的方式. 方案1:如果我们把每一个字符串压起来,用一个布尔数组表示与每一个字母的匹配关 ...

  7. P3155 [CQOI2009]叶子的染色

    P3155 [CQOI2009]叶子的染色 题目描述 给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为根,然后给一些结点(根.内部结点和叶子均可)着以黑色或白色.你的着色方案应该保证根结点到 ...

  8. BZOJ_1304_[CQOI2009]叶子的染色_树形DP

    BZOJ_1304_[CQOI2009]叶子的染色_树形DP Description 给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为根,然后给一些结点(根.内部结点和叶子均可)着以黑色或白 ...

  9. [BZOJ 1563] [NOI 2009] 诗人小G(决策单调性)

    [BZOJ 1563] [NOI 2009] 诗人小G(决策单调性) 题面 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用空格隔开并放在一行中,注意一行中可以放的句子数目是没有限制的.小 G ...

随机推荐

  1. 强力上攻后,在缓解期结束时,MACD将死叉,的后续情形

    强力上攻后,在缓解期结束时,MACD将死叉,的后续情形

  2. sqli-labs(十三)(hpp)

    第二十九关 这关说的是有waf,其实只是模拟waf的场景,就是说waf处理的变量和后台程序接受的变量不一致. 考验的参数污染,具体可以参考其他文章关于HPP的解释. 先看源码吧: 输入?id=1&am ...

  3. 总结docker常用命令

    docker 1docker pull 镜像 2docker ps -a 查看所有容器docker image 查看镜像 3docker rm 容器id 删除容器 docker rm 一次可以指定多个 ...

  4. struts2实现jQuery的异步交互

    struts2中jQuery的异步交互有两种方式: 1)是利用构造字符串的方式来实现: 使用该方法主要是在服务器端根据前端的请求,返回一个字符串信息,然后前端的jQuery通过解析该字符串信息得到对应 ...

  5. MongoDB下,启动服务

    D:\MongoDB>mongod --dbpath D:\MongoDB\Data --logpath D:\MongoDB\Log\MongoDB.log --logappend --ser ...

  6. caffe-ssd运行create_data.sh的时候报错:SSD from caffe.proto import caffe_pb2 ImportError: No module named caffe.proto

    在用voc2007和voc2012的数据训练基于caffe的SSD模型的时候,我们需要将图片数据转换成lmdb格式,运行脚本文件是SSD源码里面提供的create_data.sh(具体位置在$CAFF ...

  7. 17. Letter Combinations of a Phone Number(bfs)

    Given a string containing digits from 2-9 inclusive, return all possible letter combinations that th ...

  8. RAMPS1.4 3D打印控制板:软件下载\连接\安装\测试

    RAMPS1.4 3D打印控制板:软件下载\连接\安装\测试 特别说明: 电源接反,电机驱动板接反将有可能烧毁芯片和电路,请再三确认后再进行通电. 如何使用: 1.需要用到的模块或器件: Arduin ...

  9. Yii2 nginx配置伪静态

    Yii2 配置 Nginx 伪静态 主要检查以下代码: location / { # Redirect everything that isn't a real file to index.php t ...

  10. redis相关问题

    什么是Redis?Redis 是一个使用 C 语言写成的,开源的 key-value 数据库..和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表 ...