「HAOI2015树上染色」「树形DP」
其实我还不大会树形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」的更多相关文章
- [HAOI2015]树上染色 树状背包 dp
#4033. [HAOI2015]树上染色 Description 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并 将其他的N-K个点染成白 ...
- bzoj 4033: [HAOI2015]树上染色 [树形DP]
4033: [HAOI2015]树上染色 我写的可是\(O(n^2)\)的树形背包! 注意j倒着枚举,而k要正着枚举,因为k可能从0开始,会使用自己更新一次 #include <iostream ...
- 【BZOJ4033】[HAOI2015]树上染色 树形DP
[BZOJ4033][HAOI2015]树上染色 Description 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并将其他的N-K个点染 ...
- BZOJ_4033_[HAOI2015]树上染色_树形DP
BZOJ_4033_[HAOI2015]树上染色_树形DP Description 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并 将其他的 ...
- 洛谷 P3177 [HAOI2015]树上染色 树形DP
洛谷 P3177 [HAOI2015]树上染色 树形DP 题目描述 有一棵点数为 \(n\) 的树,树边有边权.给你一个在 \(0 \sim n\)之内的正整数 \(k\) ,你要在这棵树中选择 \( ...
- BZOJ4033: [HAOI2015]树上染色(树形DP)
4033: [HAOI2015]树上染色 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 3461 Solved: 1473[Submit][Stat ...
- 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)
4033: [HAOI2015]树上染色 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2437 Solved: 1034[Submit][Stat ...
随机推荐
- java代码(9) ---guava之Lists、Maps
guava之Lists.Maps 谷歌提供了guava包里面有很多的工具类,Lists和Maps集合工具,集合操作做了些优化提升 一.概述 1.静态工厂方法 (1)Guava提供了能够推断泛型的静态 ...
- Python爬虫 requests库基础
requests库简介 requests是使用Apache2 licensed 许可证的HTTP库. 用python编写. 比urllib2模块更简洁. Request支持HTTP连接保持和连接池,支 ...
- OAuth2.0系列之基本概念和运作流程(一)
@ 目录 一.OAuth2.0是什么? 1.1 OAuth2.0简介 1.2 OAuth2.0官方文档 二.OAuth2.0原理 2.1 OAuth2.0流程图 三. OAuth2.0的角色 四.OA ...
- .NET Core Session源码探究
前言 随着互联网的兴起,技术的整体架构设计思路有了质的提升,曾经Web开发必不可少的内置对象Session已经被慢慢的遗弃.主要原因有两点,一是Session依赖Cookie存放Session ...
- Floating-Point Hazard【求导公式】
Floating-Point Hazard 题目链接(点击) 题目描述 Given the value of low, high you will have to find the value of ...
- CentOS7.5搭建Kafka2.11-1.1.0集群与简单测试
一.下载 下载地址: http://kafka.apache.org/downloads.html 我这里下载的是Scala 2.11对应的 kafka_2.11-1.1.0.tgz 二.集群规 ...
- 安装allure测试报告
必须安装jdk1.8,配置环境变量 一.环境准备 Windows10 jdk-9.0.1 二.下载并安装JDK 到Java的官网下载JDK安装包,地址:http://www.oracle.com/te ...
- 关于单向循环链表的约瑟夫问题(Java实现)
关于单向循环链表的约瑟夫问题(Java实现) 最近在学习链表时,遇到单向循环链表中的约瑟夫问题.在构建循环链表的代码上,我有一点很不理解,遂记录下来. Josephu问题为: 设编号为1, 2,.. ...
- 嵌入式QT开发视频教程-供参考
免费嵌入式QT开发视频教程 https://pan.baidu.com/s/1bprhJ2Z QT初级到高级编程视频教程--丁林松.rarhttp://www.jisoupan.com/share/2 ...
- Java多线程与并发基础
CS-LogN思维导图:记录专业基础 面试题 开源地址:https://github.com/FISHers6/CS-LogN 多线程与并发基础 实现多线程 面试题1:有几种实现线程的方法,分别是什么 ...