BZOJ 4033[HAOI2015] 树上染色(树形DP)
4033: [HAOI2015]树上染色
Time Limit: 10 Sec  Memory Limit: 256 MB
Submit: 3188  Solved: 1366
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 2 3
1 5 1
2 3 1
2 4 2
Sample Output
【样例解释】
将点1,2染黑就能获得最大收益。
HINT
2017.9.12新加数据一组 By GXZlegend
题解
这题还是可以的。
我们用dp[i][j]代表i的子树中有j个黑点时子树中的边(如果不是整棵树的根节点也包括这个根节点和父亲的边)的最大贡献。
设这条边权为w,把整棵树分为x,y两部分 所以一条边的贡献为 边的长度*(x中的白点数*y中的白点数+x中的黑点数*y中的黑点数)
所以转化为了背包问题。每颗子树选不同的黑点有不同的权值。
然后最后加上当前子树根节点的贡献
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const long long N=;
long long n,k,cnt,head[N],size[N],dp[N][N*];
struct edge{
long long to,nxt,w;
}e[N*];
void add(long long u,long long v,long long w){
cnt++;
e[cnt].nxt=head[u];
e[cnt].to=v;
e[cnt].w=w;
head[u]=cnt;
}
void getdp(long long u,long long fa,long long w){
size[u]=;
for(long long i=head[u];i;i=e[i].nxt){
long long v=e[i].to;
if(v==fa)continue;
getdp(v,u,e[i].w);
for(long long j=min(k,size[u]);j>=;j--)
for(long long z=min(size[v],k-j);z>=;z--){
dp[u][j+z]=max(dp[u][j+z],dp[u][j]+dp[v][z]);
}
size[u]+=size[v];
}
for(long long i=;i<=min(k,size[u]);i++)dp[u][i]+=w*((size[u]-i)*(n-k-(size[u]-i))+i*(k-i));
}
int main(){
scanf("%lld%lld",&n,&k);
for(long long i=;i<=n;i++){
long long u,v,w;
scanf("%lld%lld%lld",&u,&v,&w);
add(u,v,w);
add(v,u,w);
}
getdp(,,);
printf("%lld",dp[][k]);
return ;
}
BZOJ 4033[HAOI2015] 树上染色(树形DP)的更多相关文章
- bzoj 4033: [HAOI2015]树上染色 [树形DP]
		
4033: [HAOI2015]树上染色 我写的可是\(O(n^2)\)的树形背包! 注意j倒着枚举,而k要正着枚举,因为k可能从0开始,会使用自己更新一次 #include <iostream ...
 - BZOJ 4033 [HAOI2015]树上染色 ——树形DP
		
可以去UOJ看出题人的题解. 这样的合并,每一个点对只在lca处被考虑到,复杂度$O(n^2)$ #include <map> #include <ctime> #includ ...
 - BZOJ 4033: [HAOI2015]树上染色题解
		
BZOJ 4033: [HAOI2015]树上染色题解(树形dp) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327400 原题地址: BZOJ 403 ...
 - 洛谷 P3177 [HAOI2015]树上染色 树形DP
		
洛谷 P3177 [HAOI2015]树上染色 树形DP 题目描述 有一棵点数为 \(n\) 的树,树边有边权.给你一个在 \(0 \sim n\)之内的正整数 \(k\) ,你要在这棵树中选择 \( ...
 - [BZOJ 4033] [HAOI2015] T1 【树形DP】
		
题目链接:BZOJ - 4033 题目分析 使用树形DP,用 f[i][j] 表示在以 i 为根的子树,有 j 个黑点的最大权值. 这个权值指的是,这个子树内部的点对间距离的贡献,以及 i 和 Fat ...
 - [BZOJ4033][HAOI2015]树上染色(树形DP)
		
4033: [HAOI2015]树上染色 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2437 Solved: 1034[Submit][Stat ...
 - 【BZOJ4033】[HAOI2015]树上染色 树形DP
		
[BZOJ4033][HAOI2015]树上染色 Description 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并将其他的N-K个点染 ...
 - bzoj4033 [HAOI2015]树上染色——树形DP
		
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4033 树形DP,状态中加入 x 与父亲之间的边的贡献: 边权竟然是long long... ...
 - bzoj 4033: [HAOI2015]树上染色【树形dp】
		
准确的说应该叫树上分组背包?并不知道我写的这个叫啥 设计状态f[u][j]为在以点u为根的子树中有j个黑点,转移的时候另开一个数组,不能在原数组更新(因为会用到没更新时候的状态),方程式为g[j+k] ...
 
随机推荐
- DHCPv6,IPv6的有状态自动配置
			
DHCPv6,IPv6的有状态自动配置 DHCPv6的工作原理与DHCPv4极其相似,但有一个明显的差别,那就是支持IPV6新增的编址方案.DHCP提供了一些自动配置没有的选项.在自动配置中,根本没有 ...
 - hive(I)--学习总结之常用技能
			
hive是Apache的一个顶级项目,由facebook团队开发,基于java开发面向分析师或BI等人员的数据工具(常用作数据仓库),它将hdfs文件组织成表,使用hive-sql调用mapreduc ...
 - BeanUtils(前端赋值给后台,忽略空属性)
			
package com.drn.core.util; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; im ...
 - js追加元素
			
直接运行 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...
 - .C#-NET开源方向基本
			
我的理解,nancyFx是一个.net的微型框架,可以在Linux环境下运行,ServiceStack也是全平台框架,更大一些 owin的概念:Open Web Server Interface Fo ...
 - apache rewrite 正則表達式基础
			
用了好几次rewrite,用的次数不是非常多,每次都忘,都得又一次上网上找一堆现看,总结一下,以免以后忘了 =====================分隔符===================== ...
 - 百度分页效果之纯jsp版
			
数据库连接工具类 package com.gao.page.utils; import java.sql.Connection; import java.sql.DriverManager; publ ...
 - 弹性ScrollView,和下啦刷新的效果相似 实现下拉弹回和上拉弹回
			
今天做了一个弹性ScrollView,和下啦刷新的效果类似,我想这个非常多需求都用的这样的效果 事实上这是一个自己定义的scrollView,上代码.这是我写在一个公共的组件包里的 package c ...
 - CCControlExtension/CCControlPotentiometer
			
#ifndef __CCCONTROLPOTENTIOMETER_H__ #define __CCCONTROLPOTENTIOMETER_H__ #include "CCControl.h ...
 - m_Orchestrate learning system---十六、如何快速在一堆字符图标中找到所需
			
m_Orchestrate learning system---十六.如何快速在一堆字符图标中找到所需 一.总结 一句话总结:find查找字符 比如说找teacher feedback 的图标,可以多 ...