其实我还不大会树形DP

此题就当练手叭,缕一下思路就好

题目链接 BZOJ4033

题目大意就是给一棵树,对一部分点染成黑色,剩下的为白色,问所有同色点距离之和。。。。。。。

简明扼要的题意,然额我不会QAQ

大概意思是要,枚举父亲节点分给字节点黑点k的个数,然后

子树内的白点数*树外的白点数*边权+子树内黑点数*子树外黑点数*边权

的最大值即答案

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <cmath>
#define int long long
using namespace std; int n,kk;
const int maxn=;
int f[maxn][maxn],size[maxn];//f数组即dp,f[i][j]表示当前节点i下放j个黑点时对答案的最大贡献
vector<pair<int,int> >G[maxn];//first表示下一个子节点,second表示边权 inline void dfs(int x,int fa){
f[x][]=f[x][]=;//当前一个点也没有,初值为零
int u;//字节点
int ans;
size[x]=;
for(int i=;i<G[x].size();i++){
u=G[x][i].first;//枚举所有孩子
if(u==fa) continue;
dfs(u,x);
size[x]+=size[u];//权值统计
for(int j=size[x];j>=;j--){//要倒着循环
for(int k=;k<=size[u]&&k<=j;k++){//j-k的个数
ans=k*(kk-k)+(size[u]-k)*(n-kk-(size[u]-k));//先加起来
ans*=G[x][i].second;//乘上边权
ans+=f[u][k];//统计答案
f[x][j]=max(f[x][j],f[x][j-k]+ans);//背包
}
}
}
} signed main(){
cin>>n>>kk;
for(int i=;i<=n-;i++){
int x,y,z;
cin>>x>>y>>z;
G[x].push_back(make_pair(y,z));
G[y].push_back(make_pair(x,z));
}//建图
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
f[i][j]=-0x7ffffffffffffff;//因为要取max,初始化为极小值
dfs(,);
cout<<f[][kk]<<'\n';//以1为根节点,选取kk个黑点的最大贡献即答案
return ;
}

「HAOI2015树上染色」「树形DP」的更多相关文章

  1. [HAOI2015]树上染色 树状背包 dp

    #4033. [HAOI2015]树上染色 Description 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并 将其他的N-K个点染成白 ...

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

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

  3. 【BZOJ4033】[HAOI2015]树上染色 树形DP

    [BZOJ4033][HAOI2015]树上染色 Description 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并将其他的N-K个点染 ...

  4. BZOJ_4033_[HAOI2015]树上染色_树形DP

    BZOJ_4033_[HAOI2015]树上染色_树形DP Description 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并 将其他的 ...

  5. 洛谷 P3177 [HAOI2015]树上染色 树形DP

    洛谷 P3177 [HAOI2015]树上染色 树形DP 题目描述 有一棵点数为 \(n\) 的树,树边有边权.给你一个在 \(0 \sim n\)之内的正整数 \(k\) ,你要在这棵树中选择 \( ...

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

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

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

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

  8. [HAOI2015]树上染色(树形dp)

    [HAOI2015]树上染色 题目描述 有一棵点数为 N 的树,树边有边权.给你一个在 0~ N 之内的正整数 K ,你要在这棵树中选择 K个点,将其染成黑色,并将其他 的N-K个点染成白色 . 将所 ...

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

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

随机推荐

  1. MyBatis整合双数据源

    有时候在项目中会遇到需要连接两个数据库的情况.本文就结合Spring和Mybatis来讲下怎么使用双数据源(或者是多数据源). 背景知识介绍 本文中实现多数据源的关键是Spring提供的Abstrac ...

  2. DDD之4聚合和聚合根

    聚合就是归类的意思,把同类事物统一处理: 聚合根也就是最抽象,最普遍的特性: 背景 领域建模的过程回顾: 那么问题来了? 为什么要在限界上下文和实体之间增加聚合和聚合根的概念,即作用是什么? 如何设计 ...

  3. C# 反射详解一

    首先反射是基于System.Reflection命名空间下,.Net框架提供的帮助类库,可以读取并使用metadata(元数据:描述对象信息的数据). 我们再来看下代码生成编译的总过程. 编译器编译( ...

  4. Linux命令总结大全,包含所有linux命令

    使用说明:此文档包含所有的Linux命令,只有你想不到的没有你看不到的,此文档共计10万余字,有8400多行,预计阅读时间差不多需要3个小时左右,所以要给大家说一说如何阅读此文档 为了方便大家阅读,我 ...

  5. 小师妹学JavaIO之:NIO中Channel的妙用

    目录 简介 Channel的分类 FileChannel Selector和Channel DatagramChannel SocketChannel ServerSocketChannel Asyn ...

  6. [C#.NET 拾遗补漏]05:操作符的几个骚操作

    阅读本文大概需要 1.5 分钟. 大家好,这是极客精神[C#.NET 拾遗补漏]专辑的第 5 篇文章,今天要讲的内容是操作符. 操作符的英文是 Operator,在数值计算中习惯性的被叫作运算符,所以 ...

  7. SSH原理常见应用升级及端口转发

    SSH介绍 SSH是Secure Shell Protocol的简写,由IETF网络工作小组(Network working Group)指定:在进行数据传输之前,SSH先对联机数据包通过加密技术进行 ...

  8. [BZOJ]最长道路

    题目   点这里看题目.    BZOJ 上是权限题目. 分析   这道题可以用点分治,但是我就是喜欢边分治 QAQ .   分治过程中,我们考虑经过分治边的路径的最大痛苦值.一条经过分治边的路径会被 ...

  9. Java——选择、冒泡排序、折半查找

    //选择排序对数据进行升序排序 public static void selectSortArray(int[] arr){ for(int i = 0; i<arr.length-1;i++) ...

  10. MySQL——事务(Transaction)详解

    原文:https://blog.csdn.net/w_linux/article/details/79666086