Description

题库链接

给出一棵 \(n\) 个节点的树,边有权值。让你将树上 \(k\) 个点染黑,剩余 \(n-k\) 个点染白。染色后记一种染色方案的价值为黑点间两两距离和以及白点间两两距离和。求最大价值。

\(0\leq k\leq n\leq 2000\)

Solution

定义状态 \(f_{u,i}\) 表示以 \(u\) 为根的子树中选出了 \(i\) 个黑点的子树中最大价值。

转移的话就是考虑当前节点和枚举的儿子间的边被计算了几次。

树上背包复杂为 \(O(n^2)\) 。

Code

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 2000+5; int n, k, u, v, size[N]; ll f[N][N], c;
struct tt {int to, next; ll cost; }edge[N<<1];
int path[N], top; void add(int u, int v, ll cost) {edge[++top] = (tt){v, path[u], cost}; path[u] = top; }
void dfs(int u, int fa) {
size[u] = 1; ll c = 0;
for (int i = path[u], v; i; i = edge[i].next) {
if ((v = edge[i].to) == fa) continue;
dfs(v, u); c = edge[i].cost;
for (int j = min(size[u], k); j >= 0; j--)
for (int p = min(k-j, size[v]); p >= 0; p--)
f[u][j+p] = max(f[u][j+p], f[u][j]+f[v][p]+1ll*p*(k-p)*c+1ll*(n-k-size[v]+p)*(size[v]-p)*c);
size[u] += size[v];
}
}
void work() {
scanf("%d%d", &n, &k);
for (int i = 1; i < n; i++) {
scanf("%d%d%lld", &u, &v, &c); add(u, v, c), add(v, u, c);
}
dfs(1, 0);
printf("%lld\n", f[1][k]);
}
int main() {work(); return 0; }

[HAOI 2015]树上染色的更多相关文章

  1. cogs 1963. [HAOI 2015] 树上操作 树链剖分+线段树

    1963. [HAOI 2015] 树上操作 ★★★☆   输入文件:haoi2015_t2.in   输出文件:haoi2015_t2.out   简单对比时间限制:1 s   内存限制:256 M ...

  2. [bzoj 4034][HAOI 2015]树上操作

    Description 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中 ...

  3. 洛谷P3178[HAOI]2015 树上操作

    题目 树剖裸题,这个题更可以深刻的理解树剖中把树上的节点转换为区间的思想. 要注意在区间上连续的节点,一定是在一棵子树中. #include <bits/stdc++.h> #define ...

  4. bzoj4033(树上染色)

    树上染色 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并 将其他的N-K个点染成白色.将所有点染色后,你会获得黑点两两之间的距离加上白点两两 ...

  5. bzoj 4033: [HAOI2015]树上染色 [树形DP]

    4033: [HAOI2015]树上染色 我写的可是\(O(n^2)\)的树形背包! 注意j倒着枚举,而k要正着枚举,因为k可能从0开始,会使用自己更新一次 #include <iostream ...

  6. 洛谷 P3177 树上染色 解题报告

    P3177 [HAOI2015]树上染色 题目描述 有一棵点数为\(N\)的树,树边有边权.给你一个在\(0\) ~ \(N\)之内的正整数\(K\),你要在这棵树中选择\(K\)个点,将其染成黑色, ...

  7. BZOJ4033: [HAOI2015]树上染色(树形DP)

    4033: [HAOI2015]树上染色 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 3461  Solved: 1473[Submit][Stat ...

  8. 【BZOJ】4033: [HAOI2015]树上染色 树上背包

    [题目]#2124. 「HAOI2015」树上染色 [题意]给定n个点的带边权树,要求将k个点染成黑色,使得 [ 黑点的两两距离和+白点的两两距离和 ] 最大.n<=2000. [算法]树上背包 ...

  9. BZOJ4033 HAOI2015 树上染色 【树上背包】

    BZOJ4033 HAOI2015 树上染色 Description 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并将其他的N-K个点染成白 ...

随机推荐

  1. oracle只导出触发器

    只要触发器,其他都不要 方法1:plsql develop调用exp:tools->export object—>trigger 方法2:select dbms_metadata.get_ ...

  2. 唯品会osp简介(转)

    转自 https://blog.csdn.net/panyongcsd/article/details/58617810 公司(VIP)从2015年开始在内部推动Venus框架的使用,这是一款基于Ap ...

  3. NLayerAppV3--基础结构层(Cross-Cutting部分)

    回顾:NLayerAppV3是一个使用.net 2.1实现的经典DDD的分层架构的项目. NLayerAppV3是在NLayerAppV2的基础上,使用.net core2.1进行重新构建的:它包含了 ...

  4. App.config使用方法(基础教程)

    WPF程序中的App.config文件是应用程序中经常使用的一种配置文件,System.Configuration.dll文件中提供了大量的读写的配置,是一种很高效的程序配置方式. 1.首先在工程中配 ...

  5. Mysql-基础+安装指南

    安装指南: https://www.cnblogs.com/majj/p/9160383.html  小马哥 下载完后初始化操作数据库: 1. 将文件放在 : G:\软件\mysql-8.0.15-w ...

  6. S11 day 94 RestFramework 之 APIView视图

    VIEW视图(Django自带的) 1.  url url(r'login/$', views.login.as_view()), 2.点开 as_view() , as_view()为类方法.  l ...

  7. 638. Shopping Offers

    In LeetCode Store, there are some kinds of items to sell. Each item has a price. However, there are ...

  8. (2019)OCP 12c 062考试题库出现大量新题-4

    4.Which four are true about creating and running a remote database scheduler jobs? A) A credential i ...

  9. [SqlServer] Error: 15023

    Use DataBaseName go sp_change_users_login 'update_one', 'UserName', 'UserName' 恢复数据库后,添加用户,报错号15023 ...

  10. servlet转发与重定向区别

    servlet转发与重定向   HttpServletRequest: 表示浏览器向服务器发送的请求报文,由Tomcat创建然后作为参数传递给我们doget,dopost方法. 功能:getParam ...