树形DP,dp[i][j]表示i子树中,选了j个白点,i子树中所有边的贡献。

 /**************************************************************
Problem: 4033
User: idy002
Language: C++
Result: Accepted
Time:6568 ms
Memory:32492 kb
****************************************************************/ #include <cstdio>
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
#define oo 0x3f3f3f3f3f3f3f3fLL
#define N 2010 typedef long long dnt; int n, m;
int head[N], next[N+N], dest[N+N], wght[N+N], etot;
dnt siz[N];
dnt dp[N][N], pp[N]; void adde( int u, int v, int w ) {
etot++;
wght[etot] = w;
dest[etot] = v;
next[etot] = head[u];
head[u] = etot;
}
void dfs( int u, int fa ) {
siz[u] = ;
for( int t=head[u]; t; t=next[t] ) {
int v=dest[t];
if( v==fa ) continue;
dfs( v, u );
siz[u] += siz[v];
}
int maxc = min( siz[u], m );
for( int c=; c<=maxc; c++ )
pp[c] = -oo;
pp[] = ;
for( int t=head[u]; t; t=next[t] ) {
int v=dest[t], w=wght[t];
if( v==fa ) continue;
for( int c=maxc; c>=; c-- ) {
int msc = min( c, siz[v] );
for( int sc=; sc<=msc; sc++ ) {
dnt tv = pp[c-sc]+dp[v][sc]+((dnt)sc*(m-sc)+(siz[v]-sc)*(n-m-siz[v]+sc))*w;
pp[c] = max( pp[c], tv );
}
}
}
dp[u][] = pp[];
for( int c=; c<=maxc; c++ )
dp[u][c] = max( pp[c], pp[c-] );
} int main() {
scanf( "%d%d", &n, &m );
if( n-m<m ) m=n-m;
for( int i=,u,v,w; i<n; i++ ) {
scanf( "%d%d%d", &u, &v, &w );
adde( u, v, w );
adde( v, u, w );
}
dfs(,);
printf( "%lld\n", dp[][m] );
}

bzoj 4033的更多相关文章

  1. [BZOJ 4033] [HAOI2015] T1 【树形DP】

    题目链接:BZOJ - 4033 题目分析 使用树形DP,用 f[i][j] 表示在以 i 为根的子树,有 j 个黑点的最大权值. 这个权值指的是,这个子树内部的点对间距离的贡献,以及 i 和 Fat ...

  2. [BZOJ 4033] 树上染色

    Link: BZOJ 4033 传送门 Solution: 此题用到了计算贡献的方法, 将 多条路径的路径和  $->$ $\sum_{i=1}^{n-1} w[i]*cnt[i]$ 这样我们由 ...

  3. BZOJ 4033: [HAOI2015]树上染色题解

    BZOJ 4033: [HAOI2015]树上染色题解(树形dp) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327400 原题地址: BZOJ 403 ...

  4. bzoj 4033 树上染色 - 树形动态规划

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

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

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

  6. BZOJ 4033[HAOI2015] 树上染色(树形DP)

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

  7. bzoj 4033: [HAOI2015]树上染色

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

  8. BZOJ 4033 [HAOI2015]树上染色 ——树形DP

    可以去UOJ看出题人的题解. 这样的合并,每一个点对只在lca处被考虑到,复杂度$O(n^2)$ #include <map> #include <ctime> #includ ...

  9. bzoj 4033: [HAOI2015]树上染色【树形dp】

    准确的说应该叫树上分组背包?并不知道我写的这个叫啥 设计状态f[u][j]为在以点u为根的子树中有j个黑点,转移的时候另开一个数组,不能在原数组更新(因为会用到没更新时候的状态),方程式为g[j+k] ...

随机推荐

  1. sql 内联,左联,右联,全联

    联合查询效率较高,以下例子来说明联合查询(内联.左联.右联.全联)的好处: T1表结构(用户名,密码) userid (int) username varchar(20) password  varc ...

  2. ActiveMQ之VirtualTopic是什么?

    一句话总结: VirtualTopic是为了解决持久化模式下多消费端同时接收同一条消息的问题.   想象这样一个场景:   生产端产生了一笔订单,作为消息MessageOrder发了出去. 这笔订单既 ...

  3. html-示例代码

    <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/html" xml ...

  4. POJ 1236 Network of Schools(tarjan求强连通分量+思维)

    题目链接:http://poj.org/problem?id=1236 题目大意: 给你一个网络(有向图),有两个任务: ①求出至少同时需要几份副本可以使得整个网络都获得副本 ②至少添加多少信息表(有 ...

  5. HBase(七)Hbase过滤器

    一.过滤器(Filter) 基础API中的查询操作在面对大量数据的时候是非常苍白的,这里Hbase提供了高级的查询方法:Filter.Filter可以根据簇.列.版本等更多的条件来对数据进行过滤,基于 ...

  6. 移动端css单位之 “vh” & “vw”

    一.前言: 响应式web设计离不开百分比.但是,CSS百分比并不是所有的问题的最佳解决方案.CSS的宽度是相对于包含它的最近的父元素的宽度的.但是如果你就想用视口(viewpoint)的宽度或者高度, ...

  7. bzoj 1218: [HNOI2003]激光炸弹

    思路:二维前缀和, 枚举矩形左上端点. #include<bits/stdc++.h> #define LL long long #define fi first #define se s ...

  8. sql中循环插入

    #!/bin/sh for i in {1..10}dokdsql sys/kdb<<EOF insert into test values(2) ; EOFdone

  9. (转)python的range()函数用法

    使用python的人都知道range()函数很方便,今天再用到他的时候发现了很多以前看到过但是忘记的细节.这里记录一下range(),复习下list的slide,最后分析一个好玩儿的冒泡程序. 转自: ...

  10. Hadoop整理三(Hadoop分布式计算框架MapReduce)

    一.概念 MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算.概念"Map(映射)"和"Reduce(归约)",是它们的主要思想.它极大 ...