Codeforces1099F. Cookies【DP】【线段树】【贪心】【博弈】【沙比提(这是啥算法)】
题目大意
给你一棵树,每个节点上有一堆饼干
并且告诉你在每个节点上吃饼干吃一块需要多少时间
然后告诉你经过一条边的时间
总时间是T
两个人轮流进行,一个人向下选择子节点行走或者结束游戏并向上移动吃饼干,另一个人割断一条当前节点到儿子的边或者什么都不做
问第一个人可以吃到的最大的饼干的数量
思路
首先可以把边上的时间在dfs的时候抛掉
然后如果在一个节点上停了下来
我们考虑怎么统计吃的饼干,我们肯定会贪心选择需要时间最少的先吃,这样才能吃到尽量多块
然后用线段树(把单个时间当做下标)维护一下链上的所有信息
然后如果在这个节点不停下来,我们需要递归成子问题
显然第二个人会把往下走dp值最大的一个子树搞掉,所以当前的dp值就是往下走的第二大和停下来的max
在第一个节点特判一下就好了
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N = 1e6 + 10;
struct Node {
ll v, w;
} p[N];
vector<Node> g[N];
ll n, T;
#define LD (t << 1)
#define RD (t << 1 | 1)
ll val[N << 2], siz[N << 2];
void insert(ll t, ll l, ll r, ll pos, ll cursiz) {
val[t] += pos * cursiz;
siz[t] += cursiz;
if (l == r) return;
ll mid = (l + r) >> 1;
if (pos <= mid) insert(LD, l, mid, pos, cursiz);
else insert(RD, mid + 1, r, pos, cursiz);
}
ll query(ll t, ll l, ll r, ll vl) {
if (l == r) return min(siz[t], vl / l);
ll mid = (l + r) >> 1;
if (val[LD] <= vl) return siz[LD] + query(RD, mid + 1, r, vl - val[LD]);
else return query(LD, l, mid, vl);
}
ll dfs(ll u, ll lef) {
insert(1, 1, 1e6, p[u].w, p[u].v);
ll res = query(1, 1, 1e6, lef);
ll f1 = 0, f2 = 0;
for (auto now : g[u]) {
ll v = now.v;
if (lef <= now.w * 2) continue;
ll cur = dfs(v, lef - now.w * 2);
if (cur > f1) f2 = f1, f1 = cur;
else if (cur > f2) f2 = cur;
}
insert(1, 1, 1e6, p[u].w, -p[u].v);
if (u == 1) return max(res, f1);
else return max(res, f2);
}
int main() {
scanf("%lld %lld", &n, &T);
for (ll i = 1; i <= n; i++) scanf("%lld", &p[i].v);
for (ll i = 1; i <= n; i++) scanf("%lld", &p[i].w);
for (ll i = 2; i <= n; i++) {
ll u, w; scanf("%lld %lld", &u, &w);
g[u].push_back((Node) {i, w});
}
printf("%lld", dfs(1, T));
return 0;
}
Codeforces1099F. Cookies【DP】【线段树】【贪心】【博弈】【沙比提(这是啥算法)】的更多相关文章
- Codeforces1099F. Cookies(线段树+dp+贪心+博弈)
题目链接:传送门 思路: 分析到处理节点时的吃cookie的顺序了,然鹅不会用线段树维护前缀和.技术门槛QAQ... 很容易想到可以从root开始搜索,每次深入消耗时间2*边权w. 然后对于深入到点u ...
- ZOJ 3349 Special Subsequence 简单DP + 线段树
同 HDU 2836 只不过改成了求最长子串. DP+线段树单点修改+区间查最值. #include <cstdio> #include <cstring> #include ...
- hdu 3016 dp+线段树
Man Down Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- BZOJ_1826_[JSOI2010]缓存交换 _线段树+贪心
BZOJ_1826_[JSOI2010]缓存交换 _线段树+贪心 Description 在计算机中,CPU只能和高速缓存Cache直接交换数据.当所需的内存单元不在Cache中时,则需要从主存里把数 ...
- Bzoj5251 线段树+贪心
Bzoj5251 线段树+贪心 记录本蒟蒻省选后的第一篇题解!国际惯例的题面:首先这个东西显然是一棵树.如果我们把数值排序,并建立这棵树的dfs序,显然dfs序上的一个区间对应数值的一个区间,且根为数 ...
- 2018.10.20 NOIP模拟 蛋糕(线段树+贪心/lis)
传送门 听说是最长反链衍生出的对偶定理就能秒了. 本蒟蒻直接用线段树模拟维护的. 对于第一维排序. 维护第二维的偏序关系可以借助线段树/树状数组维护逆序对的思想建立权值线段树贪心求解. 代码
- cf834D(dp+线段树区间最值,区间更新)
题目链接: http://codeforces.com/contest/834/problem/D 题意: 每个数字代表一种颜色, 一个区间的美丽度为其中颜色的种数, 给出一个有 n 个元素的数组, ...
- Codeforces Round #620 F2. Animal Observation (hard version) (dp + 线段树)
Codeforces Round #620 F2. Animal Observation (hard version) (dp + 线段树) 题目链接 题意 给定一个nm的矩阵,每行取2k的矩阵,求总 ...
- BZOJ 1852 [MexicoOI06]最长不下降序列(贪心+DP+线段树+离散化)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1852 [题目大意] 给你N对数A1,B1……An,Bn.要求你从中找出最多的对, 把它 ...
- [USACO2005][POJ3171]Cleaning Shifts(DP+线段树优化)
题目:http://poj.org/problem?id=3171 题意:给你n个区间[a,b],每个区间都有一个费用c,要你用最小的费用覆盖区间[M,E] 分析:经典的区间覆盖问题,百度可以搜到这个 ...
随机推荐
- rest_framework视图和组件
一.视图 1.基本视图 #基本视图 #抽取基类 from rest_framework.response import Response from rest_framework.views impor ...
- iOS开发 -------- transform属性(形变)
一 transform属性 在OC中,通过transform属性可以修改对象的平移,比例和旋转角度 常用的创建transform结构体的方法分两大类 (1) 创建"基于控件初始位置&qu ...
- C#以太坊基础入门
在这一部分,我们将使用C#开发一个最简单的.Net控制台应用,来接入以太坊节点,并打印 所连接节点旳版本信息.通过这一部分的学习,你将掌握以下技能: 如何使用节点仿真器 如何在命令行访问以太坊节点 如 ...
- https 适配
1info plist <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryL ...
- [LeetCode]题15:3Sum
第一次解: res = [] nums.sort() if len(nums)<3:return [] for i in range(len(nums)-2): left = i+1 right ...
- 『Python CoolBook:Collections』数据结构和算法_容器型value字典&顺序字典
一.collections.defaultdict:多值映射字典 defaultdict省去了初始化容器的过程,会默认value对象为指定类型的容器 指定list时可以使用.append, from ...
- CF 3-6 2级组 D题 STRESSFUL TRAINING 紧张的比赛
题目大概是这样的: 给出一个数列a[n] ,对于每一个数 a [i] 来说 都会在 T - - 时 -= b[i] 每个数都在任何时刻不能小于0 你可以在每次T - - 之前时给 一 个 a[i] + ...
- NodeJS中使用swig模板引擎
NodeJS中的默认引擎是jade有点过于复杂,而且不是以HTML为基础的,学习成本和前端适应成本都很大.而ejs虽然简单,但不支持模板导入,而且效率一般. swig的语法简单,学习成本很低,符合常规 ...
- Charles 抓包工具
参考博客: https://blog.csdn.net/mxw2552261/article/details/78645118 发包与改包: https://blog.csdn.net/b722305 ...
- Vue-- 监听路由变化,数据无法更新?
之前写的Vue项目,有个问题困扰了好久.新闻板块有推荐.精华.最新等几个Tab,设想通过切换Tab,改变路由参数(get/news/:tab)去获取对应数据,然后渲染到页面(用的是同一套组件),问题来 ...