[bzoj4033][HAOI2015]树上染色_树形dp
树上染色 bzoj-4033 HAOI-2015
题目大意:给定一棵n个点的树,让你在其中选出k个作为黑点,其余的是白点,收益为任意两个同色点之间距离的和。求最大收益。
注释:$1\le n\le 2000$
想法:我们看到了数据范围...一般树上问题这个数据范围一般就是背包或者数据结构,这题我们考虑树上背包。
我们考虑枚举每一棵子树选取一些黑点的贡献。但是这样选取是有后效性的,因为内部点的选取可能在外面选取同样的点产生不一样的效果,所以我们尝试把后效性移除。
具体地:我们可以将边权下传到点权,之后所有的关于每条边脑袋上的那条边的权值都预先被更新就没有后效性了。
最后,附上丑陋的代码... ...
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 2010
using namespace std; typedef long long ll;
int n,m; ll f[N][N],dpth[N]; int size[N];
int head[N],to[N<<1],nxt[N<<1],val[N<<1],tot;
inline char nc() {static char *p1,*p2,buf[100000]; return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}
int rd() {int x=0; char c=nc(); while(!isdigit(c)) c=nc(); while(isdigit(c)) x=(x<<3)+(x<<1)+c-'0',c=nc(); return x;}
inline void add(int x,int y,int z) {to[++tot]=y; val[tot]=z; nxt[tot]=head[x]; head[x]=tot;}
void dfs(int pos,int fa)
{
size[pos]=1;
for(int i=head[pos];i;i=nxt[i]) if(to[i]!=fa)
{
dpth[to[i]]=val[i];
dfs(to[i],pos);
for(int j=min(m,size[pos]);~j;j--) for(int k=min(size[to[i]],m-j);~k;k--)
f[pos][j+k]=max(f[pos][j+k],f[pos][j]+f[to[i]][k]);
size[pos]+=size[to[i]];
}
for(int i=0;i<=min(m,size[pos]);i++) f[pos][i]+=dpth[pos]*((i*(m-i))+(size[pos]-i)*(n-size[pos]-m+i));
}
void test()
{
puts("size"); for(int i=1;i<=n;i++) printf("%d ",size[i]); puts("");
puts("f"); for(int i=1;i<=n;i++) {for(int j=0;j<=m;j++) printf("%lld ",f[i][j]); puts("");}
}
int main()
{
n=rd(),m=rd(); int x,y,z; for(int i=1;i<n;i++) {x=rd(),y=rd(),z=rd(); add(x,y,z); add(y,x,z);}
dfs(1,1);/* test(); */
printf("%lld\n",f[1][m]);
}
/*
5 2
1 2 3
1 5 1
2 3 1
2 4 2
*/
小结:嘻嘻嘻嘻,好东西。
[bzoj4033][HAOI2015]树上染色_树形dp的更多相关文章
- BZOJ_4033_[HAOI2015]树上染色_树形DP
		
BZOJ_4033_[HAOI2015]树上染色_树形DP Description 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并 将其他的 ...
 - BZOJ4033: [HAOI2015]树上染色(树形DP)
		
4033: [HAOI2015]树上染色 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 3461 Solved: 1473[Submit][Stat ...
 - BZOJ4033 [HAOI2015]树上染色  【树形dp】
		
题目 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并 将其他的N-K个点染成白色.将所有点染色后,你会获得黑点两两之间的距离加上白点两两之间 ...
 - BZOJ 4033[HAOI2015] 树上染色(树形DP)
		
4033: [HAOI2015]树上染色 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 3188 Solved: 1366[Submit][Stat ...
 - [HAOI2015]树上染色(树形dp)
		
[HAOI2015]树上染色 题目描述 有一棵点数为 N 的树,树边有边权.给你一个在 0~ N 之内的正整数 K ,你要在这棵树中选择 K个点,将其染成黑色,并将其他 的N-K个点染成白色 . 将所 ...
 - 【BZOJ4033】[HAOI2015] 树上染色(树形DP)
		
点此看题面 大致题意: 给你一棵点数为N的带权树,要你在这棵树中选择K个点染成黑色,并将其他的N-K个点染成白色.要求你求出黑点两两之间的距离加上白点两两之间距离的和的最大值. 树形\(DP\) 这道 ...
 - 洛谷P3177 [HAOI2015]树上染色(树形dp)
		
题目描述 有一棵点数为 N 的树,树边有边权.给你一个在 0~ N 之内的正整数 K ,你要在这棵树中选择 K个点,将其染成黑色,并将其他 的N-K个点染成白色 . 将所有点染色后,你会获得黑点两两之 ...
 - bzoj 4033: [HAOI2015]树上染色【树形dp】
		
准确的说应该叫树上分组背包?并不知道我写的这个叫啥 设计状态f[u][j]为在以点u为根的子树中有j个黑点,转移的时候另开一个数组,不能在原数组更新(因为会用到没更新时候的状态),方程式为g[j+k] ...
 - Luogu3177 [HAOI2015]树上染色 (树形DP)
		
考场上打出来个\(2^n n^2 \log (n)\),还文件错误RE了... 其实这不就是个变了一点点的树形背包,状态是节点\(u\)子树的\(贡献\). //#include <iostre ...
 
随机推荐
- $CF241D\ Numbers$
			
problem 题目大意: 给你n个数和p,都小于50000要求留下若干个数字,使得剩下的数字异或为0,并且从左到右串联起来可以被p整除,求一种这样的方案. 搜索 #include <bits/ ...
 - [TYVJ1391]走廊泼水节
			
Description 话说,中中带领的OIER们打算举行一次冬季泼水节,当然这是要秘密进行的,绝对不可以让中中知道.不过中中可是老江湖了,当然很快就发现了我们的小阴谋,于是他准备好水枪迫不及待的想要 ...
 - 使用JS分页    <span>       beta 1.0
			
<html> <head> <title>分页</title> <style> #titleDiv{ width:500px; backgr ...
 - 6.12---知道参数的重要性------插入数据-删除数据-修改数据注意Map
			
---------------
 - Mac使用之常用快捷键
			
正式工作了,公司配给了mac,很多命令跟windows有很大不同,为了自己更好的使用mac本,特此记录平时常用的快捷键命令. 1.复制.保存等:command+c/s等,与windows不同的是ctr ...
 - 往文件内写入内容(java)
			
新建个工具类,并标记成静态的,方便调用. package util; import java.io.File;import java.io.FileOutputStream; public class ...
 - [ Nowcoder Contest 167 #C ] 部分和
			
\(\\\) \(Description\) 给出一个长度为\(N\)的数组\(A[i]\),保证\(N\)为 \(2\) 的整次幂. 对于每个 \(i\ (i\in [0,N))\)求所有满足\(( ...
 - Selenium基于Python web自动化基础一 -- 基础汇总及简单操作
			
Selenium是UI层WEB端的自动化测试框架,也是目前市面上比较流行的自动化测试框架. ui层自动化测试本质是什么?模拟用户的真实操作行为. 基础汇总: 导入所需要的模块 from seleniu ...
 - HDU_1879_继续畅通工程
			
继续畅通工程 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
 - SpringBoot+Mybatis 自动创建数据表(适用mysql)
			
Mybatis用了快两年了,在我手上的发展史大概是这样的 第一个阶段 利用Mybatis-Generator自动生成实体类.DAO接口和Mapping映射文件.那时候觉得这个特别好用,大概的过程是这样 ...