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

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

乍一看,平衡树?

其实左偏树更好做啦\(qwq\)

每个节点都来棵左偏树维护最小值,\(dfs\)往上时合并一下,要是攻不下了就把根节点删掉,直到能攻下,

对了,攻下后值会变化怎么办?\(lazy\)标记一下,和线段树同理

My complete code:

#include
#include
using namespace std;typedef long long LL;const LL maxn=400000;struct node{ LL to,next;}dis[maxn];struct code{ LL val,lazy1,lazy2,dis; LL son[2];}tree[maxn];LL n,m,num; LL scc[maxn],dep[maxn],ans[maxn],belong[maxn],tmp[maxn],k[maxn],def[maxn],change[maxn];LL head[maxn];inline void add(LL u,LL v){ dis[++num]=(node){v,head[u]}; head[u]=num;}inline void update(LL x){ LL lazy1=tree[x].lazy1, lazy2=tree[x].lazy2, son0=tree[x].son[0], son1=tree[x].son[1]; if(son0){ tree[son0].val=tree[son0].val*lazy1+lazy2; tree[son0].lazy1*=lazy1; tree[son0].lazy2=tree[son0].lazy2*lazy1+lazy2; } if(son1){ tree[son1].val=tree[son1].val*lazy1+lazy2; tree[son1].lazy1*=lazy1; tree[son1].lazy2=tree[son1].lazy2*lazy1+lazy2; } tree[x].lazy1=1; tree[x].lazy2=0;}LL merge(LL x,LL y){ if(!x || !y) return x+y; update(x); update(y); if(tree[x].val>tree[y].val) swap(x,y); tree[x].son[1]=merge(tree[x].son[1],y); if(tree[tree[x].son[1]].dis>tree[tree[x].son[0]].dis) swap(tree[x].son[1],tree[x].son[0]); tree[x].dis=tree[tree[x].son[1]].dis+1; return x;}void dfs(LL u,LL fa){ dep[u]=dep[fa]+1; for(LL i=head[u];i;i=dis[i].next){ LL v=dis[i].to; dfs(v,u); if(!k[v]){ tree[belong[v]].val+=change[v]; tree[belong[v]].lazy2+=change[v]; }else{ tree[belong[v]].val*=change[v]; tree[belong[v]].lazy1*=change[v]; tree[belong[v]].lazy2*=change[v]; } belong[u]=merge(belong[u],belong[v]); } while(belong[u] && tree[belong[u]].val

转载于:https://www.cnblogs.com/y2823774827y/p/10162593.html

你可能感兴趣的文章
Oracle学习第七课-表连接及其应用
查看>>
Python基础篇【第十三篇】:面向对象
查看>>
bzoj 2465 小球
查看>>
String类
查看>>
NoSQL简介
查看>>
java_2018_Day5_变量的格式
查看>>
在C++中调用DLL中的函数
查看>>
leetcode 32. Longest Valid Parentheses
查看>>
OpenSSL创建私有CA
查看>>
CSS3画腾讯QQ图标 无图片和js参考
查看>>
C#使用Emit生成构造函数和属性
查看>>
python pip源配置,pip配置文件存放位置
查看>>
[数据库]关于MAX()函数的一个坑
查看>>
实现前后滚动效果-axure设计实例
查看>>
windows下mysql忘记root密码--吐血测试,都是泪
查看>>
lnmp集成开发环境安装pdo_dblib扩展
查看>>
linux web.py spawn-fcgi web.py 配置
查看>>
lintcode : 空格替换
查看>>
lintcode 中等题:subsets II 带重复元素的子集
查看>>
【原创】Linux基础之测试域名IP端口连通性
查看>>