「题解报告」P3354
P3354 题解
一道很恶心的树形dp 但是我喜欢
题目大意:
一片海旁边有一条树状的河,入海口有一个大伐木场,每条河的分叉处都有村庄。建了伐木场的村庄可以直接处理木料,否则要往下游的伐木场运,运费为每吨每千米 \(1\) 分钱。现在要在一些村庄建 \(k\) 个伐木场,求建完之后最小的运输费用。
设计状态:
\begin{cases}
u:以第i个点为根的子树 \\
z:离点i最近的伐木场的位置(祖先) \\
k:该子树被分配了k个伐木场 \\
l:0或1,表示是否在此节点建伐木场
\end{cases}
\]
转移
\begin{cases}
f_{u,z,k,0}=\min\limits_{v\in son}f_{u,z,k-l,0}+f_{v,z,l,0}\\
f_{u,z,k,1}=\min\limits_{v\in son}f_{u,z,k-l,1}+f_{v,u,l,0}\ \ (此时u有伐木场,它的儿子们可以直接运往它)
\end{cases}
\]
\(l\) 为给一个儿子分配的 \(k\) 个伐木场
然后对是否建伐木场进行合并,即:
\]
初始状态
f_{u,z,j,1}=f_{u,z,j,1}+f_{v,u,0,0}
\]
代码:
#include <bits/stdc++.h>
#define _for(i,a,b) for(int i=a;i<=b;++i)
#define for_(i,a,b) for(int i=a;i>=b;--i)
#define ll long long
using namespace std;
const int N=110,inf=0x3f3f3f3f;
ll n,k,a,fm[N],c,w[N],d[N],v;
ll f[N][N][N][2];
vector<ll>s[N];
//fm:祖先,d:深度,s:儿子们
void dp(ll u){
fm[++c]=u;//把该点压入祖先们
int sz=s[u].size();
_for(i,0,sz-1){
int v=s[u][i];
d[v]+=d[u];
dp(v);
_for(i,1,c){//重点部分!!
for_(j,k,0){
//初始化
f[u][fm[i]][j][0]+=f[v][fm[i]][0][0];
f[u][fm[i]][j][1]+=f[v][u][0][0];
_for(l,0,j){
//转移
f[u][fm[i]][j][0]=min(f[u][fm[i]][j][0],f[u][fm[i]][j-l][0]+f[v][fm[i]][l][0]);
f[u][fm[i]][j][1]=min(f[u][fm[i]][j][1],f[u][fm[i]][j-l][1]+f[v][u][l][0]);
}
}
}
}_for(i,1,c){//合并
f[u][fm[i]][0][0]+=w[u]*(d[u]-d[fm[i]]);
_for(j,1,k)f[u][fm[i]][j][0]=min(f[u][fm[i]][j][0]+w[u]*(d[u]-d[fm[i]]),f[u][fm[i]][j-1][1]);
}
--c;//把该点弹出去
}
int main(){
scanf("%lld%lld",&n,&k);
_for(i,1,n){
scanf("%lld%lld%lld",&w[i],&a,&d[i]);
s[a].push_back(i);
}
dp(0);
printf("%lld\n",f[0][0][k][0]);
return 0;
}
「题解报告」P3354的更多相关文章
- 「题解报告」 P3167 [CQOI2014]通配符匹配
「题解报告」 P3167 [CQOI2014]通配符匹配 思路 *和?显然无法直接匹配,但是可以发现「通配符个数不超过 \(10\) 」,那么我们可以考虑分段匹配. 我们首先把原字符串分成多个以一个通 ...
- 「题解报告」P4577 [FJOI2018]领导集团问题
题解 P4577 [FJOI2018]领导集团问题 题解区好像没有线段树上又套了二分的做法,于是就有了这片题解. 题目传送门 怀着必 WA 的决心交了两发,一不小心就过了. 题意 求一个树上最长不下降 ...
- 「题解报告」P2154 虔诚的墓主人
P2154 虔诚的墓主人 题解 原题传送门 题意 在 \(n\times m\) 一个方格上给你 \(w\) 个点,求方格里每个点正上下左右各选 \(k\) 个点的方案数. \(1 \le N, M ...
- 「题解报告」SP16185 Mining your own business
题解 SP16185 Mining your own business 原题传送门 题意 给你一个无向图,求至少安装多少个太平井,才能使不管那个点封闭,其他点都可以与有太平井的点联通. 题解 其他题解 ...
- 「题解报告」Blocks
P3503 Blocks 题解 原题传送门 思路 首先我们可以发现,若 \(a_l\) ~ \(a_r\) 的平均值大于等于 \(k\) ,则这个区间一定可以转化为都大于等于 \(k\) 的.我们就把 ...
- 「题解报告」CF1067A Array Without Local Maximums
大佬们的题解都太深奥了,直接把转移方程放出来让其他大佬们感性理解,蒟蒻们很难理解,所以我就写了一篇让像我一样的蒟蒻能看懂的题解 原题传送门 动态规划三部曲:确定状态,转移方程,初始状态和答案. --神 ...
- 「题解报告」P7301 【[USACO21JAN] Spaced Out S】
原题传送门 神奇的5分算法:直接输出样例. 20分算法 直接把每个点是否有牛的状态DFS一遍同时判断是否合法,时间复杂度约为\(O(2^{n^2})\)(因为有判断合法的剪枝所以会比这个低).而在前四 ...
- 「GXOI / GZOI2019」简要题解
「GXOI / GZOI2019」简要题解 LOJ#3083. 「GXOI / GZOI2019」与或和 https://loj.ac/problem/3083 题意:求一个矩阵的所有子矩阵的与和 和 ...
- 【题解】#6622. 「THUPC 2019」找树 / findtree(Matrix Tree+FWT)
[题解]#6622. 「THUPC 2019」找树 / findtree(Matrix Tree+FWT) 之前做这道题不理解,有一点走火入魔了,甚至想要一本近世代数来看,然后通过人类智慧思考后发现, ...
随机推荐
- C语言:如何给全局变量起一个别名?
作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++.嵌入式.Linux. 关注下方公众号,回复[书籍],获取 Linux.嵌入式领域经典书籍:回复[PDF],获取所有原创文章( PDF 格式). ...
- SAP APO-供应网络计划
供应网络计划整合了供应链中的所有流程-采购,制造和分销. 供应网络计划可以优化采购和生产,缩短订单完成时间,并改善客户服务. 供应网络计划与高级计划和优化的其他过程紧密集成,以开发用于购买,制造和分配 ...
- 游戏启动后提示安装HMS Core,点击取消,未再次提示安装HMS Core(初始化失败返回907135003)
问题描述 我们国内的华为联运游戏集成华为游戏服务SDK 之后,被审核驳回:在未安装或需要更新华为移动服务(HMS Core)的手机上,提示安装华为移动服务,点击取消,未再次提示安装HMS Core. ...
- 自定义nginx的日志格式存储到Filebeat和Logstash
vim /etc/nginx/nginx.conf log_format main '$remote_addr - $remote_user [$time_local] ' '"$reque ...
- java后端接受Vue传递的List
Failed to resolve argument 1 of type 'java.util.List' org.springframework.web.bind.MissingServletReq ...
- MQ系列2:消息中间件的技术选型
1 背景 在高并发.高消息吞吐的互联网场景中,我们经常会使用消息队列(Message Queue)作为基础设施,在服务端架构中担当消息中转.消息削峰.事务异步处理 等职能. 对于那些不需要实时响应的的 ...
- 如何用天气预警API接口进行快速开发
天气预警能够指导人们出行.同一种类的气象灾害预警信号级别不同,对应的防御措施也不尽相同,人们通过气象灾害预警信号,合理安排出行.公众要提高防范意识,养成接收和关注预警信息的习惯,了解预警信息背后的意义 ...
- 基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现
摘要:本实验主要是以基于Caffe ResNet-50网络实现图片分类(仅推理)为例,学习如何在已经具备预训练模型的情况下,将该模型部署到昇腾AI处理器上进行推理. 本文分享自华为云社区<[CA ...
- C# 委托/事件本质详解
委托 一.什么是委托 IL层面1>委托的本质就是一个类2>继承自System.MulticastDelegate3>委托里面内置了3个方法:Invoke(),BeginInvoke( ...
- Python 元类详解
一.Type介绍 在Python中一切皆对象,类它也是对象,而元类其实就是用来创建类的对象(由于一切皆对象,所以元类其实也是一个对象). 先来看这几个例子: 例1: In [1]: type(12) ...