Description

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

Input

第一行两个整数N,K。
接下来N-1行每行三个正整数fr,to,dis,表示该树中存在一条长度为dis的边(fr,to)。
输入保证所有点之间是联通的。
N<=2000,0<=K<=N

Output

输出一个正整数,表示收益的最大值。

Sample Input

5 2
 
其实蛮正常的一个树dp,然而我狂T。然后发现一个for循环中k可以写成min( k , size[pos] )稍微优化一下,然后就过了呵呵。
//Serene
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
using namespace std;
const int maxn=2000+10,INF=2e8;
int n,k;
long long dp[maxn][maxn],ans; int aa;char cc;
int read() {
aa=0;cc=getchar();
while(cc<'0'||cc>'9') cc=getchar();
while(cc>='0'&&cc<='9') aa=aa*10+cc-'0',cc=getchar();
return aa;
} int fir[maxn],nxt[2*maxn],to[2*maxn],v[2*maxn],e=0;
void add(int x,int y,int z) {
to[++e]=y;nxt[e]=fir[x];fir[x]=e;v[e]=z;
to[++e]=x;nxt[e]=fir[y];fir[y]=e;v[e]=z;
} int fa[maxn],size[maxn];
void dfs(int pos,int dis) {
size[pos]=1;dp[pos][0]=dp[pos][1]=0;
for(int y=fir[pos];y;y=nxt[y]) {
if(to[y]==fa[pos]) continue;
fa[to[y]]=pos;
dfs(to[y],v[y]);
size[pos]+=size[to[y]];
for(int i=min(k,size[pos]);i>=0;--i)
for(int j=0;j<=i&&j<=size[to[y]];++j) {
dp[pos][i]=max(dp[pos][i],dp[pos][i-j]+dp[to[y]][j]);
}
}
if(dis) for(int i=0;i<=k;++i) dp[pos][i]+=(long long)dis*((long long)i*(k-i)+(long long)(size[pos]-i)*(n-k-size[pos]+i));
} int main() {
n=read();k=read(); int x,y,z;
for(int i=1;i<n;++i) {
x=read();y=read();z=read();
add(x,y,z);
}
for(int i=1;i<=k;++i) for(int j=1;j<=n;++j) dp[j][i]=0-(long long)INF;
dfs(1,0);
printf("%lld",dp[1][k]);
return 0;
}

  

最新文章

  1. 装逼名词-ABA CAS SpinLock
  2. CheckBox复选框全选以及获取值
  3. 史上最详细“截图”搭建Hexo博客——For Windows
  4. MVC &ndash; 3.EF(Entity Framework)
  5. css3照片墙+曲线阴影
  6. (三)VLAN基本概念
  7. JXL获取excel批注
  8. (原) c++ 杂
  9. OSX: 真的吗?Mac OS X重大漏洞 改时钟获系统最高权限
  10. js 数组里求最大值和最小值
  11. Zabbix安装客户端agent(windows和Centos7)
  12. 【BZOJ1216】操作系统(堆,模拟)
  13. windows系统设置虚拟机开机自启并运行虚拟系统
  14. 巡风配置安装 –centOS6.5
  15. 把纯C的动态库代码改造成C++版的
  16. js 模拟css3 动画1
  17. vscode 集成 cygwin 的注意事项
  18. 利用tcpcopy引流过程
  19. js读取解析JSON类型数据
  20. [javaSE] 集合框架(TreeSet)

热门文章

  1. 编码格式简介(ANSI、GBK、GB2312、UTF-8、UTF-16、GB18030和 UNICODE)
  2. 【DM642】H.264源代码在DM642上的移植
  3. 【DM8168学习笔记1】帮您快速入门 TI 的 Codec Engine
  4. 014-unittest扩展
  5. struts2-自定义拦截器-struts2标签
  6. GVEdit中使用graphviz
  7. 基于MaxCompute打造轻盈的人人车移动端数据平台
  8. animation-fill-mode 之 forwards , transition-timing-function的取值 和 transform属性
  9. window 导入sql 防止乱码
  10. 基于jquery实现图片上传本地预览功能