这题有多种做法,一种是倍增预处理出每个点往上走2^i步最少需要的初始战斗力,一种是裸的启发式合并带标记splay。

每个点合并能攻占其儿子的所有骑士,删去所有无法攻占这个城市的骑士并记录答案。

注意到splay每次实际上只需要取出最小的元素判断是否牺牲,这显然可以用堆维护。

关于可并堆打标记:和线段树打标记一样,维护乘法标记a和加法标记b,所有元素表示为ax+b,用同样的方法下传。

注意merge前要先push。

 #include<cstdio>
#include<algorithm>
#define rep(i,l,r) for (int i=(l); i<=(r); i++)
#define For(i,x) for (int i=h[x],k; i; i=nxt[i])
typedef long long ll;
using namespace std; const int N=;
int n,m,cnt,a[N],fa[N],rt[N],bg[N],ed[N],ls[N],rs[N],dis[N],dep[N],dead[N],to[N],nxt[N],h[N];
ll mul[N],plu[N],v[N],p[N],d[N];
void add(int u,int v){ to[++cnt]=v; nxt[cnt]=h[u]; h[u]=cnt; } void put(int x,ll a,ll b){
if (!x) return;
v[x]=v[x]*a+b; mul[x]*=a; plu[x]=plu[x]*a+b;
} void push(int x){
put(ls[x],mul[x],plu[x]); put(rs[x],mul[x],plu[x]);
mul[x]=; plu[x]=;
} int merge(int x,int y){
if (!x || !y) return x+y;
push(x); push(y);
if (v[x]>v[y]) swap(x,y);
rs[x]=merge(rs[x],y);
if (dis[ls[x]]<dis[rs[x]]) swap(ls[x],rs[x]);
dis[x]=dis[rs[x]]+; return x;
} int pop(int x){ push(x); return merge(ls[x],rs[x]); } void dfs(int x,int fa){
dep[x]=dep[fa]+;
For(i,x) dfs(k=to[i],x),rt[x]=merge(rt[x],rt[k]);
while (rt[x] && v[rt[x]]<d[x])
dead[x]++,ed[rt[x]]=x,rt[x]=pop(rt[x]);
if (!a[x]) put(rt[x],,p[x]); else put(rt[x],p[x],);
} int main(){
freopen("bzoj4003.in","r",stdin);
freopen("bzoj4003.out","w",stdout);
scanf("%d%d",&n,&m);
rep(i,,n) scanf("%lld",&d[i]);
rep(i,,n) scanf("%d%d%lld",&fa[i],&a[i],&p[i]),add(fa[i],i);
rep(i,,m) mul[i]=,scanf("%lld%d",&v[i],&bg[i]),rt[bg[i]]=merge(rt[bg[i]],i);
dfs(,);
rep(i,,n) printf("%d\n",dead[i]);
rep(i,,m) printf("%d\n",dep[bg[i]]-dep[ed[i]]);
return ;
}

最新文章

  1. 【PHP夯实基础系列】PHP日期,文件系统等知识点
  2. 确定比赛名次---HDU1285(拓扑排序)
  3. js 获取、清空 input type=&quot;file&quot;的值 .(转)
  4. 每日一九度之 题目1039:Zero-complexity Transposition
  5. PHP版本区别
  6. KSImageNamed-Xcode插件在xcode 6.4/6.3或其他版本中不能使用解决方案
  7. 【转】Java编程之字符集问题研究
  8. C语言的指针
  9. oracle flashback 2
  10. php使用http请求头实现文件下载
  11. Excel和notepad++加之更换
  12. Ajax基础与登入
  13. 解析 .Net Core 注入 (3) 创建对象
  14. redis 远程操作命令
  15. docker修改容器gogs时区时间
  16. Spring boot Mybatis 整合
  17. es-08-hadoop集成
  18. 024-linux中动态库libXXX.so
  19. div滚动条时div内容显示一半
  20. vue权限路由实现方式总结二

热门文章

  1. 全面了解Nginx主要应用场景(数漫江湖)
  2. hdu 1166敌兵布阵(线段树)
  3. 初识费用流 模板(spfa+slf优化) 餐巾计划问题
  4. webpack版本1与版本2的若干写法区别
  5. 一个文档让vim飞起来
  6. centos安装--两张光盘
  7. nodejs 优雅的连接 mysql
  8. 异步网络模块之aiohttp的使用(一)
  9. UNIX shell 学习笔记 一 : 几个shell的规则语法对比
  10. C++11——Use auto keyword in C++11