树形dp+贪心+增量法+排序——cf1241E(好题)
/*
给定一棵树,每个结点最多选和其相连的k条边,问使边权和最大的策略 dp[u][0|1]用来表示u没连父边|连了父边 时u子树下的最优解
如果u不和任意一个儿子连边,那么u下的收益是tot=sum{dp[v][0]}
现在我们在其中选择一个儿子v连到u,那么 tot的增量就是 dv=dp[v][1]-dp[v][0] + w; 求dp[u][0]时,我们最多可以选择k个儿子相连,那么就把 所有dv进行排序,然后找前面k个大于0的即可
dp[u][1]同理,但是只要选择k-1个儿子即可
*/
#include<bits/stdc++.h>
#include<vector>
using namespace std;
#define N 500005
#define ll long long vector<pair<ll,ll> >G[N];
int n,k;
ll dp[N][]; int cmp(ll a,ll b){
return a>b;
} void dfs(int u,int pre){
ll tot=;
vector<ll>d;d.clear();
for(auto p:G[u]){
int v=p.first;
if(v==pre)continue;
dfs(v,u);
d.push_back(dp[v][]-dp[v][]+p.second);
tot+=dp[v][];
}
sort(d.begin(),d.end(),cmp);
//求出dp[u][0]
dp[u][]=tot;
for(int i=;i<min(k,(int)d.size());i++)
if(d[i]>)dp[u][]+=d[i];
//求出dp[u][1]
dp[u][]=tot;
for(int i=;i<min(k-,(int)d.size());i++)
if(d[i]>)dp[u][]+=d[i]; } void init(){
for(int i=;i<=n;i++)G[i].clear();
for(int i=;i<=n;i++)dp[i][]=dp[i][]=;
} int main(){
int q;cin>>q;
while(q--){
init();
cin>>n>>k;
for(int i=;i<n;i++){
int u,v,w;scanf("%d%d%d",&u,&v,&w);
G[u].push_back(make_pair(v,w));
G[v].push_back(make_pair(u,w));
} /*for(int i=1;i<=n;i++){
for(auto v:G[i])
cout<<v.first<<" ";
puts("");
}*/ dfs(,); cout<<dp[][]<<'\n';
}
}
树形dp+贪心+增量法+排序——cf1241E(好题)的更多相关文章
- 【bzoj4027】[HEOI2015]兔子与樱花 树形dp+贪心
题目描述 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号从0到n-1,这n个分叉点由n-1个树枝连接,我们可以把它 ...
- [BZOJ1596] [Usaco2008 Jan]电话网络(树形DP || 贪心)
传送门 1.树形DP #include <cstdio> #include <cstring> #include <iostream> #define N 1000 ...
- bzoj 3829: [Poi2014]FarmCraft 树形dp+贪心
题意: $mhy$ 住在一棵有 $n$ 个点的树的 $1$ 号结点上,每个结点上都有一个妹子. $mhy$ 从自己家出发,去给每一个妹子都送一台电脑,每个妹子拿到电脑后就会开始安装 $zhx$ 牌杀毒 ...
- POJ - 2057 The Lost House(树形DP+贪心)
https://vjudge.net/problem/POJ-2057 题意 有一只蜗牛爬上某个树枝末睡着之后从树上掉下来,发现后面的"房子"却丢在了树上面,.现在这只蜗牛要求寻找 ...
- [POI2014]FAR-FarmCraft 树形DP + 贪心思想
(感觉洛谷上题面那一小段中文根本看不懂啊,好多条件都没讲,直接就是安装也要一个时间啊,,,明明不止啊!还好有百度翻译......) 题意:一棵树,一开始在1号节点(root),边权都为1,每个点有点权 ...
- 树形DP+贪心(乱搞)(HDU4714)
题意:给出一个树形图,要求把该树形成一个环最少的步骤(断开一条边和形成一条边都需一步) 分析:很明显,要想把树形成一个环,就要先把其分裂成m条子链之后把子链形成环需要的步骤是2*m+1,所以只需要m最 ...
- [HNOI2003]消防局的设立 树形dp // 贪心
https://www.luogu.org/problemnew/show/P2279 一开始就想到了贪心的方法,不过一直觉得不能证明. 贪心的考虑是在深度从深到浅遍历每个结点的过程中,对于每个没有覆 ...
- ACM学习历程—FZU2195 检查站点(树形DP || 贪心)
Description 在山上一共有N个站点需要检查,检查员从山顶出发去各个站点进行检查,各个站点间有且仅有一条通路,检查员下山前往站点时比较轻松,而上山时却需要额外的时间,问最后检查员检查完所有站点 ...
- BZOJ4027/LG4107 「HEOI2015」兔子与樱花 树形DP+贪心
问题描述 LG4107 题解 首先,我们可以直接令结点 \(x\) 的权值为 \(c[x]+son_x\) ,发现将 \(x,y\) 合并,相当于增加 \(c[x]+c[y]-1\) 的重量. 容易想 ...
随机推荐
- 2019牛客多校第五场H - subsequence 2 拓扑
H - subsequence 2 题意 要你使用前\(m\)个小写字母构造一个长度为\(n\)的字符串 有\(m*(m-1)/2\)个限制条件: \(c_{1} .c_{2}. len\):表示除去 ...
- Python基础教程(010)--第一个程序Hello Python
前言 会编写Hello Python源程序 内容 1,在桌面下,新建Python目录 2,在认识的Python目录下,新建一个HelloPython的文件 linux下: touch HellPyth ...
- 在ios微信中提交form,php端收不到参数的问题
今天做h5页面时,微信浏览器中提交form表单,发现php端收不到post过来的参数,在普通浏览器中可以,安卓微信也可以,$_POST,$_GET,$_REQUEST等方式都不行. 后来,把form表 ...
- Nacos Config客户端与Spring Boot、Spring Cloud深度集成
目录 Nacos与Spring Boot集成 @NacosPropertySource和@NacosValue com.alibaba.nacos.spring.core.env.NacosPrope ...
- ansible 远程执行时提示 command not found 问题
问题 最近在学习 ansible ,在使用普通用户远程执行 ip a 命令是发现提示错误:/bin/sh: ip: command not found. 原因 command not found 命令 ...
- https://www.cnblogs.com/limanjihe/p/10184327.html
https://www.cnblogs.com/limanjihe/p/10184327.html https://blog.csdn.net/xnnswmzdszyd/article/details ...
- 使用cookie来做身份认证 转载https://www.cnblogs.com/sheldon-lou/p/9545726.html
文章是msdn的官方文档,链接在这里.其实也有中文的文档,这里还是想做一个记录. 文章有asp.net core 2.x 和1.x 版本,我这里就忽略1.x了. 下面先说几点额外的东西有助于理解. A ...
- SourceInsight 支持 Python
SourceInsight 支持 Python 步骤一:下载相关的插件 Python.CLF插件 链接如下: Python.CLF|Python.CLF下载_红软基地 http://www.rsdow ...
- A + B Problem II HDU - 1002
非常简单的大数加法,因为不会Java只能手写大数加法了;博客存一下以后回来看看 #include<bits/stdc++.h> using namespace std; +; char A ...
- nginx -stream(tcp连接)反向代理配置 实现代理mysql以及文件上传
原文链接:https://blog.csdn.net/Activity_Time/article/details/95767390 1. stream模块安装 nginx默认安装的时候无法加载流str ...