博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[BZOJ4003][JLOI2015]城池攻占
阅读量:6663 次
发布时间:2019-06-25

本文共 2059 字,大约阅读时间需要 6 分钟。

左偏树裸题 合并+lazytag即可

每个点合并儿子然后弹出所有<ci的即可

然后每个骑士直接dep[x]-dep[y]挂了的节点和初始节点的深度差即可

样例太水了注意要判每个节点万一骑士挂完了是空的QAQ

//Love and Freedom.#include
#include
#include
#include
#define ll long long#define inf 20021225#define N 300010using namespace std;ll read(){ ll s=0,f=1; char ch=getchar(); while(ch>'9'||ch<'0'){
if(ch=='-') f=-1;ch=getchar();} while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar(); return f*s;}struct edge{
int to,lt;}e[N]; int in[N],cnt,dep[N]; int rt[N];void add(int x,int y){e[++cnt].to=y;e[cnt].lt=in[x];in[x]=cnt;} struct node{ll val,mul,add; int fa,son[2],dis;}t[N];int st[N]; int war[N],city[N]; ll v[N],c[N]; bool kd[N];void pushdown(int x){ int ls=t[x].son[0],rs=t[x].son[1]; ll mul=t[x].mul,add=t[x].add; if(mul!=1) { t[ls].val*=mul; t[rs].val*=mul; t[ls].mul*=mul; t[rs].mul*=mul; t[ls].add*=mul; t[rs].add*=mul; t[x].mul=1; } if(add) { t[ls].val+=add; t[rs].val+=add; t[ls].add+=add; t[rs].add+=add; t[x].add=0; }}int find(int x){
return t[x].fa^x?t[x].fa=find(t[x].fa):x;}int merge(int x,int y){ if(!x||!y) return x|y; if(t[x].val>t[y].val) swap(x,y); pushdown(x); t[x].son[1]=merge(t[x].son[1],y); t[t[x].son[1]].fa=t[t[x].son[0]].fa=x; t[x].fa=x; if(t[t[x].son[1]].dis>t[t[x].son[0]].dis) swap(t[x].son[0],t[x].son[1]); t[x].dis=t[t[x].son[1]].dis+1; return x;}void modify(int x,ll add,ll mul){ if(mul!=1){t[x].val*=mul; t[x].mul*=mul; t[x].add*=mul;} if(add){t[x].val+=add; t[x].add+=add;}}void pop(int &x,int ct){ war[x]=dep[st[x]]-dep[ct]; city[ct]++; pushdown(x); t[t[x].son[0]].fa=t[x].son[0]; t[t[x].son[1]].fa=t[x].son[1]; t[x].fa=merge(t[x].son[0],t[x].son[1]); t[t[x].fa].fa=t[x].fa; x=t[x].fa;}void work(int x){ for(int i=in[x];i;i=e[i].lt) dep[e[i].to]=dep[x]+1,work(e[i].to),rt[x]=merge(rt[x],rt[e[i].to]); while(rt[x]&&t[rt[x]].val
View Code

 

转载于:https://www.cnblogs.com/hanyuweining/p/10654054.html

你可能感兴趣的文章
使用shell脚本定时采集日志数据到hdfs分布式文件系统
查看>>
SUSE11&12 永久关闭防火墙
查看>>
CentOS 6.9/7通过yum安装指定版本的PostgreSQL扩展PostGIS
查看>>
netty学习2
查看>>
[转]WordPress 主题教程 #2:模板文件和模板
查看>>
vue项目eslint环境配置与vscode配置eslint
查看>>
phpcms2008远程代码执行漏洞
查看>>
【123】网络配置解析
查看>>
Oracle数据库—— PL/SQL进阶编程
查看>>
开源项目剖析之apache-common-pool
查看>>
使用target打开的iframe 获取src的问题
查看>>
Solve one floodlight install problem
查看>>
读Kafka Consumer源码
查看>>
java多线程问题之同步器CyclicBarrier
查看>>
后端http缓存原理
查看>>
Off-heap Memory in Apache Flink and the curious JIT compiler
查看>>
总结的常用方法
查看>>
hibernate _HQL多表语法详解
查看>>
运维圈顶级大会SREcon现场报道,解读SRE 2017年动向
查看>>
Eric Evans:DDD还未结束!
查看>>