洛谷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 ...
随机推荐
- Java第三天,如何从键盘输入?匿名对象的使用方法
在学习完Java的基础语法之后,我们还需要学会如何使用API文档,这几乎是程序员所必备的能力.对于API我们不必须去记住每一个类的功能乃至用法,只需会查就行了.但是话说回来,一些经常使用的类我们还是必 ...
- javascript 入门(1)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta lang ...
- 3.K均值算法
一.概念 K-means中心思想:事先确定常数K,常数K意味着最终的聚类类别数,首先随机选定初始点为质心,并通过计算每一个样本与质心之间的相似度(这里为欧式距离),将样本点归到最相似的类中,接着,重新 ...
- 萌新带你开车上p站(一)
本文作者:萌新 0x01前言 这一系列文章为pwnable.krToddlr’s Bottle的全部题解,其中有三道题目相对而言稍难或者说比较经典,单独成篇,其他题目的题解放在一起发出来. 0x02f ...
- 【python实现卷积神经网络】卷积层Conv2D实现(带stride、padding)
关于卷积操作是如何进行的就不必多说了,结合代码一步一步来看卷积层是怎么实现的. 代码来源:https://github.com/eriklindernoren/ML-From-Scratch 先看一下 ...
- Vue-CLI 3.x 部署项目至生产服务器
本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发.Nodejs.Python.Linux.IT资讯等板块. 本教程主要讲解的是 Vue ...
- 16-jmeter-CLI模式(无图形界面)
GUI和非GUI图形界面的使用区别: 非GUI界面:命令模式运行可以将实时的log文件保存到本地,位置可以自定义,不会占用太多资源,可以长时间运行. GUI图形界面:在运行时会消耗资源,且图形界面运行 ...
- 08-jmeter-plugins-manager.jar插件安装
1.安装第三方插件:jmeter-plugins-manager 2.将此jar包下载好后放到jmeter的安装目录lib/ext文件夹内, 3.然后运行jmeter,选择菜单“选项”可见插件入口 4 ...
- 实战if-else 过多详解
1.本文实例代码仅仅是俩个小例子. package com.example.demo.pattern.ifElse; import java.util.HashMap; import java.uti ...
- list 的sublist 隐藏 bug
list A = new list(); list a = A.sublist(0,3); 假如对a进行增加或者删除 会 同样改变A里的值,即其实a仅仅是A的一个试图,而不是一个新的list 对象,所 ...