解析

看起来就是左偏树的基本操作啊…
然而就是调不过去
吐了qwq

参考了望月大神的实现
感觉清晰的多
就定义并查集维护的是每个点所在的堆的根节点
一下子少了很多恶心的套娃

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define il inline
const int N=4e6+100;
const double eps=1e-9;
inline ll read(){ll x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f;
}
int n,m,w;
ll k;
int ls[N],rs[N],dis[N],tot,f[N],rt[N];
ll val[N];int bel[N],vis[N];
int find(int x){return x==bel[x]?x:bel[x]=find(bel[x]);}inline int New(ll v){++tot;ls[tot]=rs[tot]=0;f[tot]=0;dis[tot]=0;val[tot]=v;return tot;
}
inline void pushup(int x){if(dis[rs[x]]>dis[ls[x]]) swap(ls[x],rs[x]);dis[x]=dis[rs[x]]+1;return;
}
int merge(int u,int v){if(!u||!v){return u|v;}if(val[u]<val[v]||(val[u]==val[v]&&u>v)) swap(u,v);rs[u]=merge(rs[u],v);pushup(u);bel[ls[u]]=bel[rs[u]]=bel[u]=u;return u;
}void del(int x){if(vis[x]) return;vis[x]=1;val[x]=0;int o=merge(ls[x],rs[x]);ls[x]=rs[x]=0;merge(find(x),o);return;
}
void Merge(int u,int v){u=find(u),v=find(v);if(u==v) return;merge(u,v);return;
}
void jianshao(int x,int w){x=find(x);if(val[x]<=w){del(x);return;}int o=x,oo=merge(ls[x],rs[x]);ls[o]=rs[o]=0;val[o]-=w;ls[o]=rs[o]=0;merge(o,oo);return;
}int main(){#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);#endifdis[0]=-1;int T=read();w=read();k=read();while(T--){tot=0;memset(vis,0,sizeof(vis));n=read();m=read();for(int i=1;i<=n;i++){New(read());bel[i]=i;}for(int i=1;i<=m;i++){int op=read();if(op==2) del(read());else if(op==3){int a=read(),b=read();jianshao(a,b);}else{Merge(read(),read());}}ll res(0),mx(0);for(int i=1;i<=n;i++){if(find(i)!=i) continue;res+=val[i];mx=max(mx,val[i]);}if(w==2) res-=mx;else if(w==3) res+=mx;if(res>k) printf("Hell "); else if(res) printf("Heaven ");else printf("Gensokyo ");printf("%lld\n",res);}return 0;
}

洛谷P4971:断罪者(左偏树)相关推荐

  1. 左偏树初步学习 洛谷P3377

    玩的有点多......睡的有点少... 左偏树是一种支持O(logn)的时间复杂度内进行合并的堆式数据结构. 定义: 外结点:左儿子或者右儿子是空结点的结点 距离:一个结点x的距离disx定义为其子树 ...

  2. 【洛谷3377】 左偏树(可并堆)

    前言 其实我是不小心翻线性基的时候看见的. Solution 左偏树只会模板,挖坑待补 代码实现 #include<stdio.h> #include<stdlib.h> #i ...

  3. 洛谷P3273 [SCOI2011] 棘手的操作 [左偏树]

    题目传送门 棘手的操作 题目描述 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来有如下一些操作: U x y: 加一条边,连接第x个节点和第y个节点 A1 ...

  4. 【BZOJ】1455 罗马游戏 左偏树

    题目传送门 这题和洛谷上的左偏树模板的解题思路是一模一样的,所以只要贴上左偏树的模板就好了. 附上AC代码: #include <cstdio> #include <cctype&g ...

  5. 左偏树(可并堆)初步及其应用

    作者:hsez_yyh 链接:左偏树(可并堆)初步及其应用_hsez_yyh的博客-CSDN博客 来源:湖北省黄石二中信息竞赛组        著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  6. 信息学奥赛一本通 1365:FBI树(fbi) | 1928:【04NOIP普及组】FBI树 | 洛谷 P1087 [NOIP2004 普及组] FBI 树

    [题目链接] ybt 1365:FBI树(fbi) ybt 1928:[04NOIP普及组]FBI树 洛谷 P1087 [NOIP2004 普及组] FBI 树 [题目考点] 1. 二叉树 [解题思路 ...

  7. 《程序设计解题策略》——1.6 利用左偏树实现优先队列的合并

    本节书摘来自华章计算机<程序设计解题策略>一书中的第1章,第1.6节,作者:吴永辉 王建德 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.6 利用左偏树实 ...

  8. 【学习笔记】浅谈短小可爱的左偏树(可并堆)

    文章目录 左偏树 左偏树的合并(merge)操作 例题 罗马游戏 [Apio2012]dispatching [JLOI2015]城池攻占 [Baltic2004]sequence 左偏树 左偏树是一 ...

  9. P3642 [APIO2016]烟火表演(左偏树、函数)

    解析 感觉是左偏树的神题了. 首先有一个比较显然的结论,一个合法的方案中,两个叶子到它们 lca\text{lca}lca 的距离必须相等. 考虑设计 dp\text{dp}dp : fi,xf_{i ...

最新文章

  1. 字符串之数字子串求和
  2. boost::static_assert简单的测试程序
  3. 2019计算机科学与技术全日制调济,2019年华侨大学计算机科学与技术学院全日制学术型研究生调剂信息(第三批)...
  4. qt 中文转十六进制_QT中16进制字符串转汉字
  5. HALCON示例程序inspect_bottle_mouth.hdev玻璃瓶口缺陷检测
  6. 3、什么是控制反转(IoC),什么是依赖注入
  7. 连接MySQL时出现警告Establishing SSL connection without server's identity verification is not recommended.
  8. C语言动态链表数据结构
  9. vue中v-show v-if v-bind的使用
  10. 盒子模型的各种高度记录
  11. 表迁移工具的选型-复制ibd的方法
  12. matlab的gaot在哪里,最权威遗传算法工具箱GAOT(gaot)安装方法
  13. 我要转行,考CPDA数据分析师证书有哪些帮助?
  14. 论文笔记:《DeblurGAN: Blind Motion Deblurring Using Conditional Adversarial Networks》
  15. 白话大数据开发之Azkaban问题一
  16. ajax英文翻译,Ajax[埃阿斯]英文名的中文翻译意思、发音、来源及流行趋势-千代英文名...
  17. 2021年P气瓶充装新版试题及P气瓶充装证考试
  18. 人人都是产品经理2.0-04章摘要
  19. SpringBoot Banner 图片定制修改
  20. BootStrap富文本编辑器Summernote

热门文章

  1. swiper自定义分页器
  2. Socket编程流程梳理
  3. 通过matlab对比UFMC和OFDM的频谱,星座图
  4. 2017-2020年英语四六级真题及答案汇总
  5. 解决endnotes给word文件添加索引失败问题
  6. 360 c语言笔试题 或与问题
  7. html制作花样链接卡,挂钩弹片连接式手机壳的制作方法
  8. netplier全部源码解析
  9. 2015年6月美国San Diego之旅
  10. Linux五个查找命令