「JLOI2015」城池攻占 解题报告
「JLOI2015」城池攻占
注意到任意两个人的战斗力相对大小的不变的
可以离线的把所有人赛到初始点的堆里
然后做启发式合并就可以了
Code:
#include <cstdio>
#include <cctype>
#include <algorithm>
#define ll long long
const int N=3e5+10;
template <class T>
void read(T &x)
{
int f=0;x=0;char c=getchar();
while(!isdigit(c)) f|=c=='-',c=getchar();
while(isdigit(c)) x=x*10+c-'0',c=getchar();
x=f?-x:x;
}
int head[N],to[N],Next[N],cnt;
void add(int u,int v)
{
to[++cnt]=v,Next[cnt]=head[u],head[u]=cnt;
}
int n,m,op[N],ans1[N],ans2[N],st[N],dep[N];
ll h[N],a[N];
struct node
{
ll mul,add;
node(){}
node(ll Mul,ll Add){mul=Mul,add=Add;}
}tag[N];
#define ls ch[x][0]
#define rs ch[x][1]
int ch[N][2],dis[N],root[N];ll dat[N];
void addtag(int x,node tg)
{
if(!x) return;
dat[x]=dat[x]*tg.mul+tg.add;
tag[x].mul*=tg.mul,tag[x].add*=tg.mul;
tag[x].add+=tg.add;
}
void pushdown(int x)
{
if(tag[x].mul==1&&!tag[x].add) return;
addtag(ls,tag[x]);
addtag(rs,tag[x]);
tag[x].mul=1,tag[x].add=0;
}
int Merge(int x,int y)
{
if(!x||!y) return x^y;
pushdown(x),pushdown(y);
if(dat[x]>dat[y]) std::swap(x,y);
rs=Merge(rs,y);
if(dis[ls]<dis[rs]) std::swap(ls,rs);
dis[x]=dis[rs]+1;
return x;
}
void del(int &x){pushdown(x),x=Merge(ls,rs);}
void dfs(int now)
{
for(int v,i=head[now];i;i=Next[i])
{
dep[v=to[i]]=dep[now]+1;
dfs(v);
root[now]=Merge(root[now],root[v]);
}
while(dat[root[now]]<h[now])
{
ans2[root[now]]=dep[st[root[now]]]-dep[now];
++ans1[now];
del(root[now]);
}
if(op[now]) addtag(root[now],node(a[now],0));
else addtag(root[now],node(1,a[now]));
}
int main()
{
read(n),read(m);
for(int i=1;i<=n;i++) read(h[i]);
for(int f,i=2;i<=n;i++) read(f),read(op[i]),read(a[i]),add(f,i);
h[0]=2e18,dat[0]=3e18;
for(int i=1;i<=m;i++)
{
read(dat[i]),read(st[i]);
dis[i]=1,tag[i]=node(1,0);
root[st[i]]=Merge(root[st[i]],i);
}
dep[1]=1;dfs(1);
while(dat[root[1]]<h[0])
{
ans2[root[1]]=dep[st[root[1]]];
del(root[1]);
}
for(int i=1;i<=n;i++) printf("%d\n",ans1[i]);
for(int i=1;i<=m;i++) printf("%d\n",ans2[i]);
return 0;
}
2019.2.26
「JLOI2015」城池攻占 解题报告的更多相关文章
- 「JLOI2015」骗我呢 解题报告?
「JLOI2015」骗我呢 这什么神仙题 \[\color{purple}{Link}\] 可以学到的东西 对越过直线的东西翻折进行容斥 之类的..吧? Code: #include <cstd ...
- 「JLOI2015」管道连接 解题报告
「JLOI2015」管道连接 先按照斯坦纳树求一个 然后合并成斯坦纳森林 直接枚举树的集合再dp一下就好了 Code: #include <cstdio> #include <cct ...
- 「JLOI2015」战争调度 解题报告
「JLOI2015」战争调度 感觉一到晚上大脑就宕机了... 题目本身不难,就算没接触过想想也是可以想到的 这个满二叉树的深度很浅啊,每个点只会和它的\(n-1\)个祖先匹配啊 于是可以暴力枚举祖先链 ...
- 【LOJ】#2107. 「JLOI2015」城池攻占
题解 用一个平衡树维护能攻占到u点的骑士,合并到父亲的时候去掉攻击力小于父亲生命值的那部分,只要把那棵树拆掉并且将树中的所有骑士更新一下答案,用无旋式treap很好写 合并的时候只要启发式合并就可以了 ...
- 「JLOI2015」城池攻占 可并堆
传送门 分析 如果直接暴力枚举的话肯定会超时 我们可以从下往上遍历,维护一个小根堆 每次到达一个节点把战败的骑士扔出去 剩下的再继续向上合并,注意要维护一下其实的战斗力 可以像线段树那样用一个lazy ...
- 「FJOI2016」神秘数 解题报告
「FJOI2016」神秘数 这题不sb,我挺sb的... 我连不带区间的都不会哇 考虑给你一个整数集,如何求这个神秘数 这有点像一个01背包,复杂度和值域有关.但是你发现01背包可以求出更多的东西,就 ...
- 「ZJOI2016」大森林 解题报告
「ZJOI2016」大森林 神仙题... 很显然线段树搞不了 考虑离线操作 我们只搞一颗树,从位置1一直往后移动,然后维护它的形态试试 显然操作0,1都可以拆成差分的形式,就是加入和删除 因为保证了操 ...
- 「SCOI2016」背单词 解题报告
「SCOI2016」背单词 出题人sb 题意有毒 大概是告诉你,你给一堆n个单词安排顺序 如果当前位置为x 当前单词的后缀没在这堆单词出现过,代价x 这里的后缀是原意,但不算自己,举个例子比如abc的 ...
- 「NOI2015」寿司晚宴 解题报告
「NOI2015」寿司晚宴 这个题思路其实挺自然的,但是我太傻了...最开始想着钦定一些,结果发现假了.. 首先一个比较套路的事情是状压前8个质数,后面的只会在一个数出现一次的再想办法就好. 然后发现 ...
随机推荐
- echarts使用笔记五:echarts的Zoom控件
option = { title: { text: '趋势' }, tooltip : { trigger: 'axis', show:true, axisPointer : { // 坐标轴指示器, ...
- rem移动端适配方案
一. rem vs em 单位 定义 特点 rem font size of the root element 以根元素字体大小为基准 em font size of the element 以父元素 ...
- css引入的两种方法link和@import的区别和用法
link和@import都是HTML中引入CSS的语法单词. 两者的基本语法 link语法结构 <link href="外部CSS文件的URL路径" rel="st ...
- Windows 机器上面同时安装mysql5.6 和 mysql5.7 的方法
1. 自己遇到的两个坑: . mysql 登录的时候 需要使用-P 来指定端口号 不然默认走 呢 . mysql 5.6 和 mysql 5.7 更改用户密码的命令不一样.. 我这边浪费了很长时间: ...
- WSL Windows subsytem linux 的简单学习与使用
1. win10 1709 以上的版本应该都增加上了 ctrl +r 运行 winver 查看版本 2. 添加删除程序 增加 wsl 增加一个功能 3. 打开cmd 输入 bash 即可 4. 可以将 ...
- oss上传和下载的笔记
<<<<<<<<<对oss操作,上传文件>>>>>>>>>>>>>& ...
- 谈谈对C#中反射的一些理解和认识(上)
今天就平常用到的非常多的反射这个技术来做一个总结,当然关于反射需要讲解的东西实在是太多的内容,在一片文章中想要讲解清楚是非常难的,本篇博客也是就自己本人对这些内容学习后的一个总结,当然包括看书和自己写 ...
- web跨域请求
第一种情况: 1. sina.com=====>baidu.com/xxx.jsp 也就是前面的域名不相同,(url第三根斜杠之前的内容,也就是主机) 2:localhost =====> ...
- codeforces472C
Design Tutorial: Make It Nondeterministic CodeForces - 472C A way to make a new task is to make it n ...
- iOS的非常全的三方库,插件,大牛博客
转自: http://www.cnblogs.com/zyjzyj/p/6015625.html github排名:https://github.com/trending, github搜索:http ...