洛谷P3018 [USACO11MAR]树装饰Tree Decoration
洛谷P3018 [USACO11MAR]树装饰Tree Decoration
树形DP
因为要求最小,我们就贪心地用每个子树中的最小cost来支付就行了
1 #include <bits/stdc++.h>
2 #define For(i, j, k) for(int i=j; i<=k; i++)
3 #define Dow(i, j, k) for(int i=j; i>=k; i--)
4 #define LL long long
5 using namespace std;
6 inline int read() {
7 int x = 0, f = 1;
8 char ch = getchar();
9 while(ch<'0'||ch>'9') { if(ch=='-') f = -1; ch = getchar(); }
10 while(ch>='0'&&ch<='9') { x = x*10+ch-48; ch = getchar(); }
11 return x * f;
12 }
13
14 const int N = 1e5+11;
15 int n, nedge;
16 int Mn[N], fa[N], head[N], need[N];
17 LL f[N], have[N];
18 struct edge{
19 int to, pre;
20 }e[N*2];
21
22 inline void add(int x,int y) {
23 e[++nedge].to = y;
24 e[nedge].pre = head[x];
25 head[x] = nedge;
26 }
27
28 void dfs(int u) {
29 for(int i=head[u]; i; i=e[i].pre) {
30 int v = e[i].to;
31 if(v == fa[u]) continue;
32 dfs( v );
33 have[u] += have[v];
34 Mn[u] = min(Mn[u], Mn[v]);
35 f[u] += f[v];
36 }
37 if(need[u] > have[u]) {
38 f[u] = f[u]+1ll*(need[u]-have[u])*Mn[u];
39 have[u] = need[u];
40 }
41 }
42
43 int main() {
44 n = read();
45 For(i, 1, n) {
46 fa[i] = read();
47 need[i] = read();
48 Mn[i] = read();
49 if(fa[i] != -1) add(i, fa[i]), add(fa[i], i);
50 }
51 dfs(1);
52 printf("%lld\n",f[1]);
53 return 0;
54 }
转载于:https://www.cnblogs.com/third2333/p/8444558.html
洛谷P3018 [USACO11MAR]树装饰Tree Decoration的更多相关文章
- 洛谷——P3018 [USACO11MAR]树装饰Tree Decoration
P3018 [USACO11MAR]树装饰Tree Decoration 比较水的一道树上模拟水题,更新每个点的价值为以这个点为根的子树中的价值最小值,同时更新以每个节点为根的$sum$值,即以这个节 ...
- 洛谷1087 FBI树 解题报告
洛谷1087 FBI树 本题地址:http://www.luogu.org/problem/show?pid=1087 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全 ...
- LCT总结——概念篇+洛谷P3690[模板]Link Cut Tree(动态树)(LCT,Splay)
为了优化体验(其实是强迫症),蒟蒻把总结拆成了两篇,方便不同学习阶段的Dalao们切换. LCT总结--应用篇戳这里 概念.性质简述 首先介绍一下链剖分的概念(感谢laofu的讲课) 链剖分,是指一类 ...
- 洛谷P2633 Count on a tree(主席树上树)
题目描述 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始为0,即第一个 ...
- 洛谷P2633 Count on a tree(主席树,倍增LCA)
洛谷题目传送门 题目大意 就是给你一棵树,每个点都有点权,每次任意询问两点间路径上点权第k小的值(强制在线). 思路分析 第k小......又是主席树了.但这次变成树了,无法直接维护前缀和. 又是树上 ...
- 洛谷P2633 Count on a tree(主席树,倍增LCA,树上差分)
洛谷题目传送门 题目大意 就是给你一棵树,每个点都有点权,每次任意询问两点间路径上点权第k小的值(强制在线). 思路分析 第k小......又是主席树了.但这次变成树了,无法直接维护前缀和. 又是树上 ...
- 洛谷 P6177 - Count on a tree II/【模板】树分块(树分块)
洛谷题面传送门 好家伙,在做这道题之前我甚至不知道有个东西叫树分块 树分块,说白了就是像对序列分块一样设一个阈值 \(B\),然后在树上随机撒 \(\dfrac{n}{B}\) 个关键点,满足任意一个 ...
- 【洛谷1501】[国家集训队] Tree II(LCT维护懒惰标记)
点此看题面 大致题意: 有一棵初始边权全为\(1\)的树,四种操作:将两点间路径边权都加上一个数,删一条边.加一条新边,将两点间路径边权都加上一个数,询问两点间路径权值和. 序列版 这道题有一个序列版 ...
- 洛谷 P2633 Count on a tree
P2633 Count on a tree 题目描述 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中last ...
随机推荐
- JAVABEAN的SCOPE属性(转载)
对于JSP 程序而言,使用JavaBeans 组件不仅可以封装许多信息,而且还可以将一些 数据处理的逻辑隐藏到JavaBeans 的内部,除此之外,我们还可以设定JavaBeans 的Scope ...
- LVS 集群与存储《路由转发》
LVS 集群与存储<路由转发> 集群简介 u 什么是集群 • 一组通过高 ...
- 创建一个tar备份包
创建一个tar备份包 2.1问题 本例要求使用tar工具完成以下备份任务: 创 ...
- python--一些知识点
一. ==和is的区别 1. ==意为左右两端的值是否相等 2. is意为,左边是否就是右边,python会检测左右两边的引用位置,相等才是True(注:一定范围内的数字,左右两边为True) 二. ...
- 家庭版记账本app开发之关于(数据库查找出数据)圆饼图的生成
这次完成的主要的怎样从数据库中调出数据.之后通过相关的数据,生成想要的圆饼图.以方便用户更加直观的看见关于账本的基本情况. 在圆饼图生成中用到了一些外部资源 具体的import如下: import c ...
- 配置spark历史服务(spark二)
1. 编辑spark-defaults.conf位置文件 添加spark.eventLog.enabled和spark.eventLog.dir的配置修改spark.eventLog.dir为我们之前 ...
- Delphi Unicode转中文
function UniCode2GB(S : String):String;Var I: Integer;beginI := Length(S);while I >=4 do begintry ...
- OpenCV 之 基本绘图
OpenCV 虽是开源的计算机视觉库,但里面也有一些基础的绘图函数,本文将介绍几种常用绘图函数:直线.圆.椭圆.长方形.多边形等. 1 数据结构 1.1 二维向量 cv::Point 代表的是二维 ...
- NK16
C 小石的海岛之旅 链接:https://ac.nowcoder.com/acm/contest/949/C来源:牛客网 暑假到了,小石和小雨到海岛上玩. 从水平方向看海岛可以看成 nnn个小块,每一 ...
- HPU第一次团队赛
D. Tom的战力问题 Tom被斯派克揍了TAT.Tom下定决心要战胜斯派克.但是在战胜最强的斯派克之前,Tom要先打败其他的狗.为此,他打算先收集一下信息.现在Tom在了得到了一些关于战斗力的小道消 ...