用(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>
#define ll long long
#define N 100010
#define mst(a) memset(a,0,sizeof(a))
#define id second.second
#define p second.first
#define PI pair<int,int>
#define PII pair<info,PI>
using namespace std; struct edge{int to,nex;}e[N<<1];
struct info{
ll a,b;
info(){}
info(ll _a,ll _b):a(_a),b(_b){}
void operator+=(const info&o){
ll na=max(a,a-b+o.a),nb=b+o.b-a-o.a+na;
a=na,b=nb;
}
bool operator<(const info&o)const{
int x=a<b,y=o.a<o.b;
if(x!=y)return x<y;
if(a<b)return a>o.a;
return b<o.b;
}
}A[N];
int T,tot,head[N],n,f[N],act[N],cnt;
bool del[N];
priority_queue<PII> q; inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
void Link(int u,int v){e[++tot].to=v;e[tot].nex=head[u];head[u]=tot;}
void dfs(int u,int fa){for(int i=head[u];i;i=e[i].nex)if(e[i].to!=fa)f[e[i].to]=u,dfs(e[i].to,u);}
int Find(int x){return del[f[x]]?f[x]=Find(f[x]):f[x];}
void Init(){
mst(head),tot=cnt=0,mst(del),mst(f),mst(act);
n=read(),A[1]=info(0,0);
for(int i=2;i<=n;++i)A[i].a=read(),A[i].b=read();
for(int i=1;i<n;++i){
int u=read(),v=read();
Link(u,v),Link(v,u);
}
dfs(1,0);
} void solve(){
for(int i=2;i<=n;++i)q.push(PII(A[i],PI(0,i)));
for(;!q.empty();){
PII u=q.top();q.pop();
if(del[u.id]||act[u.id]!=u.p)continue;
del[u.id]=1;
int fa=Find(u.id);
A[fa]+=A[u.id];
if(fa!=1)q.push(PII(A[fa],PI(act[fa]=++cnt,fa)));
}
printf("%lld\n",A[1].a);
} int main(){for(T=read();T--;){Init();solve();}}

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

  1. [hdu6326]Monster Hunter

    考虑树是以1为中心的菊花图的情况,也即如何安排打怪兽的顺序 用二元组$(a,b)$来描述怪兽,则对于两个怪兽$(a_{1},b_{1})$和$(a_{2},b_{2})$,交换两者不会影响血量的变化量 ...

  2. Day3-A-Problem H. Monster Hunter HDU6326

    Little Q is fighting against scary monsters in the game ``Monster Hunter''. The battlefield consists ...

  3. HDU暑假多校第三场H.Monster Hunter

    一.题意 给定一个树状地图,每个树节点上有一只怪物,打死一只怪物的过程中将会消耗A点HP,打死之后将会获得B点HP.因为树状结构,所以每只怪物必须先打死父节点的怪兽之后在打死子节点的怪物.现在,给定每 ...

  4. HDU 6326 Problem H Monster Hunter

    \(\mathtt{Problem H}\) \(\mathtt{Monster}\) \(\mathtt{Hunter}\) \(\mathcal{Description}\) 题目 给定一棵 \( ...

  5. 2020ICPC南京 M.Monster Hunter

    题目大意 一颗根为 \(1\) 的有 \((2≤≤2000)\) 个节点的树,每个节点有一个权值 \(ℎ_{} (1≤ℎ_{}≤10^9)\) ,能删除某个点的前提是其父亲节点已经被删除,并且删除一个 ...

  6. HDU 6326.Problem H. Monster Hunter-贪心(优先队列)+流水线排序+路径压缩、节点合并(并查集) (2018 Multi-University Training Contest 3 1008)

    6326.Problem H. Monster Hunter 题意就是打怪兽,给定一棵 n 个点的树,除 1 外每个点有一只怪兽,打败它需要先消耗 ai点 HP,再恢复 bi点 HP.求从 1 号点出 ...

  7. 2018 HDU多校第三场赛后补题

    2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube ...

  8. 2018 Multi-University Training Contest 3 - HDU Contest

    题解: solution Code: A. Ascending Rating #include<cstdio> const int N=10000010; int T,n,m,k,P,Q, ...

  9. 2018 Multi-University Training Contest 3 Solution

    A - Problem A. Ascending Rating 题意:给出n个数,给出区间长度m.对于每个区间,初始值的max为0,cnt为0.遇到一个a[i] > ans, 更新ans并且cn ...

随机推荐

  1. PHP error_log 实际运用

    PHP的error_log()函数合理用起来还真方便呢,来看下这个函数: error_log(message,type,destination,headers); 参数 描述 message 必需.规 ...

  2. July 23rd 2017 Week 30th Sunday

    Setting goals is the first step in turning the invisible into the visible. 设定目标是将实现梦想的第一步. If you wa ...

  3. React v15.5.0更新说明 & v16.0.0更新预告

    React今日发布了15.5.0版本,同时这也将是以15开头的最后一个版本,下一次发布,我们将迎来React 16.0.0 在15.5.0这一版本中,主要有以下两处改动: 独立React.PropTy ...

  4. day13 面向对象练习

    //1 public class Area_interface { public static void main(String[] args) { Rect r = new Rect(15, 12) ...

  5. 用sql语句实现年龄分段统计

    SELECT CASE WHEN (age >= 10 AND age <= 20) THEN '10-20' WHEN (age >= 21 AND age <= 30) T ...

  6. HTML和CSS实现常见的布局

    https://segmentfault.com/a/1190000003931851#articleHeader15

  7. BZOJ4887:[TJOI2017]可乐(矩阵乘法)

    Description 加里敦星球的人们特别喜欢喝可乐.因而,他们的敌对星球研发出了一个可乐机器人,并且 放在了加里敦星球的1号城市上.这个可乐机器人有三种行为:停在原地,去下一个相邻的 城市,自爆. ...

  8. 解决hash冲突方法

    转自:https://www.cnblogs.com/wuchaodzxx/p/7396599.html 目录 开放定址法 线性探测再散列 二次探测再散列 伪随机探测再散列 再哈希法 链地址法 建立公 ...

  9. Mac系统下配置JAVA Maven Ant 环境变量

    Mac 启动加载文件位置(可设置环境变量) ------------------------------------------------------- (1)首先要知道你使用的Mac OS X是什 ...

  10. Mybatis 和Spring整合之原始dao开发

    F:\Aziliao\mybatis\代码\31.mybatis与spring整合-开发原始dao 1.1. SqlMapConfig.xml <?xml version="1.0&q ...