[HDU6326]Monster Hunter(贪心)】的更多相关文章

用(a,b)表示一个点先失去a点HP,然后增加b点HP 首先容易证明忽略父亲条件下,任意两个点,先吃b大的最优 对于一个节点v和它的父节点u,若此时选v最优,那么就是吃到u时可以立即吃掉v, 于是可以将u和v合并表示吃掉u时立即吃v,然后v的子节点连到u上 于是用一个堆维护节点,并查集找父亲 Code #include <cstdio> #include <algorithm> #include <queue> #include <cstring> #def…
考虑树是以1为中心的菊花图的情况,也即如何安排打怪兽的顺序 用二元组$(a,b)$来描述怪兽,则对于两个怪兽$(a_{1},b_{1})$和$(a_{2},b_{2})$,交换两者不会影响血量的变化量,而会改变初始血量的需求,具体即比较$\max(a_{1},a_{1}-b_{1}+a_{2})$和$\max(a_{2},a_{2}-b_{2}+a_{1})$ 如果能证明传递性,那么以此进行排序即可 观察上述式子,可以得到以下信息: 1.$a\le b$的怪兽优于$a>b$的怪兽 2.对于$a\…
Little Q is fighting against scary monsters in the game ``Monster Hunter''. The battlefield consists of nn intersections, labeled by 1,2,...,n1,2,...,n, connected by n−1n−1bidirectional roads. Little Q is now at the 11-th intersection, with XX units…
一.题意 给定一个树状地图,每个树节点上有一只怪物,打死一只怪物的过程中将会消耗A点HP,打死之后将会获得B点HP.因为树状结构,所以每只怪物必须先打死父节点的怪兽之后在打死子节点的怪物.现在,给定每只怪兽的a,b和树状结构的联通关系,求初始HP最小的击败顺序. Little Q is fighting against scary monsters in the game ``Monster Hunter''. The battlefield consists of n intersection…
\(\mathtt{Problem H}\) \(\mathtt{Monster}\) \(\mathtt{Hunter}\) \(\mathcal{Description}\) 题目 给定一棵 \(n\)\((n \leq 10^6)\) 个点的树,除 \(1\) 号结点外每个结点都有一只怪兽,打败他需要先消耗 \(a_i\) 点 \(HP\),击败后可以获得 \(b_i\) 点 \(HP\),求打败所有怪兽需要的最小 \(HP\). \(\mathcal{Solution}\) 先不考虑父亲…
题目大意 一颗根为 \(1\) 的有 \((2≤≤2000)\) 个节点的树,每个节点有一个权值 \(ℎ_{} (1≤ℎ_{}≤10^9)\) ,能删除某个点的前提是其父亲节点已经被删除,并且删除一个节点的费用为 \(ℎ_{}+∑_{∈[]}ℎ_{}\) ,有 \(\) 次使用魔法的机会,每次使用可以免费并且无视限制条件地删去 \(1\) 个节点.分别求出当 \(=0\sim \) 时,删除全部节点所需要的最小花费. 思路 代码 #include<bits/stdc++.h> #include…
6326.Problem H. Monster Hunter 题意就是打怪兽,给定一棵 n 个点的树,除 1 外每个点有一只怪兽,打败它需要先消耗 ai点 HP,再恢复 bi点 HP.求从 1 号点出发按照最优策略打败所有怪兽一开始所需的最少 HP. 直接贴官方题解吧,这个题写的脑壳疼. 官方题解: 其实就是一直合并节点,最后合并到只有一个节点就是结果,具体的不想说什么了,这个题看了好久了,不想再看到他了... 代码是个人理解+个人习惯+综合多个题解写的.mdzz,我要撞墙... 代码: //1…
2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube 题意: 在画布上画一个三维立方体. 题解: 模拟即可. 代码: #include <bits/stdc++.h> using namespace std; int a, b, c, R, C; char g[505][505]; int main () { int T; cin >>…
题解: solution Code: A. Ascending Rating #include<cstdio> const int N=10000010; int T,n,m,k,P,Q,R,MOD,i,a[N],q[N],h,t;long long A,B; int main(){ scanf("%d",&T); while(T--){ scanf("%d%d%d%d%d%d%d",&n,&m,&k,&P,&am…
A - Problem A. Ascending Rating 题意:给出n个数,给出区间长度m.对于每个区间,初始值的max为0,cnt为0.遇到一个a[i] > ans, 更新ans并且cnt++.计算 $A = \sum_{i = 1}^{i = n - m +1} (max \oplus i)$ $B = \sum_{i = 1}^{i = n - m +1} (cnt \oplus i)$ 思路:单调队列,倒着扫一遍,对于每个区间的cnt就是队列的长度,扫一遍即可. #include<…