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

4033: [HAOI2015]树上染色

Time Limit: 10 Sec  Memory Limit: 256 MB
Submit: 2437  Solved: 1034
[Submit][Status][Discuss]

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
1 2 3
1 5 1
2 3 1
2 4 2

Sample Output

17
【样例解释】
将点1,2染黑就能获得最大收益。

HINT

2017.9.12新加数据一组 By GXZlegend



Source

鸣谢bhiaibogf提供

[Submit][Status][Discuss]

初看此题,树上背包!f[i][j]表示以i为根的子树选j个黑点的最大收益!

然后就发现转移爆炸。

于是令f[i][j]表示以i为根的子树选j个黑点的贡献,合并子树贡献后将自己到父亲的边的贡献加上即可,转移一句话。

然后就没了?

回头一看发现复杂度是$O(n^3)$的,于是分析一波复杂度。

$T(n)=\sum_{u=1}^{n}\sum_{v,w\ is\ a\ son\ of\ u} size[v]\times size[w]=\sum_{u=1}^{n}\sum_{u\ is\ the\ LCA\ of\ v,w} 1=O(n^2)$

于是就可做了,当然如果写丑了还是会变成$O(n^3)$的。

最后要记得边长是long long,狂WA不止。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #define rep(i,l,r) for (int i=l; i<=r; i++)
 5 #define For(i,x) for (int i=h[x],k; i; i=nxt[i])
 6 typedef long long ll;
 7 using namespace std;
 8 
 9 const int N=2010;
10 int n,m,u,v,w,cnt,h[N],sz[N],to[N<<1],nxt[N<<1];
11 ll f[N][N],dep[N],val[N<<1];
12 void add(int u,int v,int w){ to[++cnt]=v; val[cnt]=w; nxt[cnt]=h[u]; h[u]=cnt; }
13 
14 void dfs(int x,int fa){
15     f[x][0]=f[x][1]=0; sz[x]=1;
16     For(i,x) if ((k=to[i])!=fa){
17         dep[k]=val[i]; dfs(k,x);
18         for (int l=min(sz[x],m); l>=0; l--)
19             for (int j=min(sz[k],m-l); j>=0; j--) f[x][j+l]=max(f[x][j+l],f[x][l]+f[k][j]);
20         sz[x]+=sz[k];
21     }
22     rep(i,0,min(sz[x],m)) f[x][i]+=dep[x]*(i*(m-i)+(sz[x]-i)*(n-sz[x]-m+i));
23 }
24 
25 int main(){
26     freopen("bzoj4033.in","r",stdin);
27     freopen("bzoj4033.out","w",stdout);
28     scanf("%d%d",&n,&m);
29     memset(f,-0x3f,sizeof(f));
30     rep(i,2,n) scanf("%d%d%d",&u,&v,&w),add(u,v,w),add(v,u,w);
31     dfs(1,0); printf("%lld\n",f[1][m]);
32     return 0;
33 }

 

转载于:https://www.cnblogs.com/HocRiser/p/8757555.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267297.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php数组添加省会城市,【JSON数据】中国各省份省会城市经纬度 JSON

[{ name: 北京, value: [ 116.3979471, 39.9081726, 78 ] },{ name: 上海, value: [ 121.4692688, 31.2381763, 75 ] },{ name: 天津, value: [ 117.2523808, 39.1038561, 95 ] },{ name: 重庆, value: [ 106.548425, 29.5549144, 78 ] },{ name: 河北, value: [ 114.4897766, …

CentOS 6.0安装JDK7

CentOS 6.0安装JDK7 - Sea Wang - 博客园CentOS 6.0安装JDK7话说在CentOS下安装JDK7&#xff08;下载地址&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/java-se-jdk-7-download-432154.html&#xff09;&#xff0c;同事直接告诉我说双击jdk-7-linux-…

Python成长之路【第七篇】:Python基础之装饰器

一、什么是装饰器 装饰&#xff1a;装饰既修饰&#xff0c;意指为其他函数添加新功能 器&#xff1a;器既函数 装饰器定义&#xff1a;本质就是函数&#xff0c;功能是为其他函数添加新功能 二、装饰器需要遵循的原则 1、不能修改装饰器的源代码&#xff08;开放封闭原则&#…

php中改变函数路由,php – 如何修改codeigniter中的路由

我终于找到了我想要的东西.以下是我的代码在routes.php中的样子./* Custom Routes. */// Store Normal Pages.$route[home/(:any)] "base/home/$1";$route[about/(:any)] "base/about/$1";$route[services/(:any)] "base/services/$1";$route…

主域控宕机无法恢复后,如何配置辅助域控继续工作

情况如下&#xff1a; 系统基础结构如下&#xff1a;一个主域控&#xff0c;一个辅助域控且都安装AD与DNS集成区。 如果&#xff1a; 主域控宕机且无法恢复&#xff0c;请问辅助域应做些什么才能替代主域控继续工作&#xff1f; 第一步&#xff1a;在辅助域控上清除主域控AD数…

$.get、$.post 和 $().load()

一、$.get() 用于get方式进行异步请求。 结构&#xff1a; $.get( url, data, callback, type)&#xff1b; url - 请求路径&#xff08;string&#xff09;; data - 发送至服务器的键值对数据 &#xff08;object&#xff09;; callback - 状态为success时的回调函数&a…

sql数据库与oracle数据库同步,[sql数据库同步]Oracle与SQL Server如何实现表数据同步...

在线QQ客服&#xff1a;1922638专业的SQL Server、MySQL数据库同步软件数据库的Oracle版本为10.2&#xff0c;并安装在Linux系统上。数据库SQL Server的版本是SQL 2005&#xff0c;已安装在Windows XP系统上。现在我们需要做的是在两个数据库表之间同步数据。现在&#xff0c;最…

零食嘴----美食领域的美丽说

零食嘴美食分享社区首页 阿里巴巴参谋长曾鸣曾说过&#xff1a;“淘宝等美丽说模式整整等了两年。不仅在女性领域&#xff0c;阿里希望在各个维度都出现‘美丽说’。” 零食嘴就是美食领域美丽说。 所谓的美丽说模式&#xff0c;是指社会化电子商务分享的模式&#xff0c;在一个…

Symfony2

--开放性 --可扩展性 --持续升级性 --有商业背景和支持性 --被广泛使用性 --引领PHP领域最佳实践性 ----官网&#xff08;查询功能使用&#xff09; 定义类 类的属性和方法统称为类成员&#xff1b;类的实例化就是通过类的定义创建一个类的对象&#xff1b; 类定义》多个类得实…

oracle导出数据dummy,oracle导出表结构1

oracle导出表结构1.exp/imp工具在cmd中输入 exp username/password连接串回车&#xff0c;在进入如下时&#xff0c;输入no&#xff0c;就ok了导出表数据(yes/no)&#xff1a;yes> no&#xff1b;补充----------------exp/imp工具&#xff1b;带参数&#xff1a;rowsy ——带…

Tree.Panel各项属性

1、Ext.tree.TreePanel主要配置项&#xff1a;root&#xff1a;树的根节点。rootVisible&#xff1a;是否显示根节点&#xff0c;默认为true。useArrows&#xff1a;是否在树中使用Vista样式箭头&#xff0c;默认为false。lines&#xff1a;是否显示树线&#xff0c;默认为true…

测试用例设计方法

测试用例设计方法 本篇由本人整理黑盒、白盒、接口测试一系列用例设计方法。 黑盒测试用例设计方法包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交试验设计法、功能图法、场景图法等。 &#xff08;一&#xff09;等价类划分法 定义&#xff1a;等…

oracle 在数据库打开状态下进行备份时_下面描述不正确的是,Oracle数据库DBA面试题50道及答案_经典...

Oracle数据库DBA面试题50道及答案_经典1. 解释冷备份和热备份的不同点以及各自的优点解答&#xff1a;热备份针对归档模式的数据库&#xff0c;在数据库仍旧处于工作状态时进行备份。而冷备份指在数据库关闭后&#xff0c;进行备份&#xff0c;适用于所有模式的数据库。热备份的…

Disk Quota磁盘配额

Disk Quota &#xff1a;磁盘配额 限制某个用户或某个组&#xff0c;对某个分区(生效级别是文件系统)的使用能力&#xff1b;由于早期的Unix系统是多用户、多任务的环境&#xff0c;所以一台主机的磁盘会被多个用户使用&#xff0c;某个用户占用大量的磁盘空间会影响其他用户对…

linux进度条脚本,Linux下简易进度条的实现代码

在生活中&#xff0c;进度条是很常见的&#xff0c;那么&#xff0c;进度条是如何实现的呢&#xff1f;首先&#xff0c;进度条的动态是利用人眼视觉暂留效果的。实际上是如下过程&#xff1a;先输出&#xff1a;[ ]表示进度是1%&#xff0c;刷新之后再输出&#xff1a;[ …

省选之前的未完成的计划(截至到省选)

PLAN OF THE COMING HEOI good problems:-bzoj4823:[Cqoi2017]老C的方块 【*】-bzoj3171:[Tjoi2013]循环格 【*】-bzoj4200:[Noi2015]小园丁与老司机 【*】-bzoj1061:[Noi2008]志愿者招募 【*】-bzoj3600:没有人的算术 【*】-bzoj2806:[Ctsc2012]Cheat 【*】-bzoj2219:数论之神…

动手写的Python的HTML语法分析器(面向对象)

动手写的Python的HTML语法分析器&#xff08;面向对象&#xff09; 主要包括4个文件&#xff0c;util.py文件主要负责截取每个块。 rules.py文件定义两个类&#xff0c;超类Rule和分别对应的子类&#xff0c;子类定义了不同的划分块的要求,子类包换action函数&#xff0c;调用h…

Linux中mysql的卸载和重装,在Linux下面卸载与重新安装Postgresql

在Linux下面卸载与重新安装Postgresql1. 先把原来的postgresql安装包找出来&#xff0c;如果找不到就可以直接安装了。[roottestserver postgresql]# rpm -qa|grep postpostgresql-docs-8.0.3-1.1AXpostgresql-libs-8.0.3-1.1AXfreeradius-postgresql-1.0.1-3.RHEL4.1AXpostgre…

[原]Jenkins(二十) jenkins再出发之Error: Opening Robot Framework log failed

错误缘由&#xff1a;使用plugin [public robot framework test results] 生成的HTML文件都无法正常打开.解决方案&#xff1a;Connect on your jenkins url (http://[IP]:8080/) Click on administer Jenkins Click on consol jenkins Copy this into the field and execut…

【016】VS2010连接内置SQL数据库

参考&#xff1a;传智播客.Net培训.net视频教程 >> 【05】第五季 ADO.NET&#xff08;1-30&#xff09; 示例代码&#xff1a;sql_test.zip 首先建立一个 控制台 或者 WinForm 项目&#xff0c;然后进行下面的操作&#xff01; 1. 在 项目 上面右键》添加》新建项 2. 接下…