2019.01.17 bzoj2333: [SCOI2011]棘手的操作(启发式合并)
传送门
启发式合并菜题。
题意:支持与连通块有关的几种操作。
要求支持连边,单点修改,连通块修改,全局修改和单点查值,连通块查最大值和全局最大值。
我们对每个连通块和答案用可删堆维护最大值,然后用启发式合并来解决连边的问题。
关键在于连通块修改,这个可以给每个连通块维护一个标记,然后在合并的时候每个数记得修改值就行了。
代码
#include<bits/stdc++.h>
#define ri register int
using namespace std;
inline int read(){
int ans=0,w=1;
char ch=getchar();
while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans*w;
}
const int N=3e5+5;
struct IN_OUT_priority_queue{
priority_queue<int>a,b;
inline void push(const int&x){a.push(x);}
inline void del(const int&x){b.push(x);}
inline int top(){while(b.size()&&a.top()==b.top())a.pop(),b.pop();return a.top();}
inline int size(){return a.size()-b.size();}
}ans,S[N];
int n,fa[N],det[N],val[N],all=0;
vector<int>id[N];
inline int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
inline void solve1(){
int x=find(read()),y=find(read());
if(x==y)return;
if(id[x].size()<id[y].size())swap(x,y);
fa[y]=x,ans.del(S[x].top()+det[x]),ans.del(S[y].top()+det[y]);
for(ri i=0;i<id[y].size();++i)id[x].push_back(id[y][i]),val[id[y][i]]+=det[y]-det[x],S[x].push(val[id[y][i]]);
ans.push(S[x].top()+det[x]);
}
inline void solve2(){
int x=read(),fx=find(x),y=read();
ans.del(S[fx].top()+det[fx]);
S[fx].del(val[x]),S[fx].push(val[x]+=y);
ans.push(S[fx].top()+det[fx]);
}
inline void solve3(){int x=find(read()),v=read();ans.del(S[x].top()+det[x]),det[x]+=v,ans.push(S[x].top()+det[x]);}
inline void solve4(){all+=read();}
inline void solve5(){int x=read();cout<<val[x]+det[find(x)]+all<<'\n';}
inline void solve6(){int x=find(read());cout<<S[x].top()+det[x]+all<<'\n';}
inline void solve7(){cout<<ans.top()+all<<'\n';}
int main(){
n=read();
for(ri i=1;i<=n;++i)id[i].push_back(i),fa[i]=i,S[i].push(val[i]=read()),ans.push(val[i]);
for(ri tt=read(),a,b,op;tt;--tt){
string s;
cin>>s;
if(s=="U")solve1();
if(s=="A1")solve2();
if(s=="A2")solve3();
if(s=="A3")solve4();
if(s=="F1")solve5();
if(s=="F2")solve6();
if(s=="F3")solve7();
}
return 0;
}
2019.01.17 bzoj2333: [SCOI2011]棘手的操作(启发式合并)的更多相关文章
- 真--可并堆模板--BZOJ2333: [SCOI2011]棘手的操作
n<=300000个点,开始是独立的,m<=300000个操作: 方法一:单点修改.查询,区间修改.查询?等等等等这里修改是块修改不是连续的啊,那就让他连续呗!具体方法:离线后,每次连接两 ...
- BZOJ2333:[SCOI2011]棘手的操作(Splay)
Description 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来有如下一些操作: U x y: 加一条边,连接第x个节点和第y个节点 A1 x v: ...
- BZOJ2333 [SCOI2011]棘手的操作 堆 左偏树 可并堆
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ2333 题意概括 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i ...
- [bzoj2333] [SCOI2011]棘手的操作 (可并堆)
//以后为了凑字数还是把题面搬上来吧2333 发布时间果然各种应景... Time Limit: 10 Sec Memory Limit: 128 MB Description 有N个节点,标号从1 ...
- bzoj千题计划217:bzoj2333: [SCOI2011]棘手的操作
http://www.lydsy.com/JudgeOnline/problem.php?id=2333 读入所有数据,先模拟一遍所有的合并操作 我们不关心联通块长什么样,只关心联通块内有谁 所以可以 ...
- BZOJ2333 [SCOI2011]棘手的操作 【离线 + 线段树】
题目 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来有如下一些操作: U x y: 加一条边,连接第x个节点和第y个节点 A1 x v: 将第x个节点的权 ...
- bzoj2333 [SCOI2011]棘手的操作(洛谷3273)
题目描述 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来有如下一些操作:U x y: 加一条边,连接第x个节点和第y个节点A1 x v: 将第x个节点的权 ...
- bzoj2333 [SCOI2011]棘手的操作
用set维护每个联通块里的最值,multiset维护所有块里的最值,并查集维护连通性,然后随便搞搞就行了,合并时候采用启发式合并.复杂度O(nlognlogn),大概勉强过的程度,反正跑的很慢就是了. ...
- (右偏树)Bzoj2333: [SCOI2011]棘手的操作
题面 戳我 Sol 右偏树滑稽+并查集 再在全局开一个可删除的堆(priority_queue) 注意细节 # include <bits/stdc++.h> # define RG re ...
随机推荐
- HDU-1004.Let the ballon Rise(STL-map)
2019-02-28-08:56:03 初次做本题是用字符串硬钢,最近校队训练时又遇到才知道用map是真的舒服.需要注意的是map的用法. clear : 清除map中的所有元素,map.clear( ...
- Hdu1805-Expression(表达式树模版题+层序遍历树+栈的基本应用)
2018-11-23-02:27:37 原题链接 题目描述: 题目一目了然. 本题思路: 本题很容易能想到是构建表达式树然后按照层序逆序输出即可. AC代码: #include <cstdio& ...
- MySQL-查缺补漏
MySQL show create table tablename #查看表设计代码数据 show create table tablename/G #同上 desc tablename # 查看表数 ...
- war包内更新文件
感谢@这个博客提供的分享 亲测有效,原文: 1.如果要替换的文件直接在war包的根目录(一级目录)下,直接使用jar uvf命令替换即可 如:替换a.war中b.xml文件 jar uvf a.war ...
- Number & Maths类
Java Number & Math 类 一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte.int.long.double 等. 实例 int a = 5000;float ...
- avalon子孙元素属性监听
HTML正文: <body ms-controller="ex"> <div class="ms-hover" ms-click=" ...
- HTML 转 PDF 之 wkhtmltopdf 工具精讲
术语定义 文档对象 “文档对象”是指PDF文档中的文档对象,共有三种类型的“文档对象”,他们分别是“页面对象”,“封面对象”和“目录对象”. 页面对象 “页面对象”是指以页面的形式在PDF文档中呈现的 ...
- @__CheckForDebuggerJustMyCode@4
最近在编译一个项目MiniFSWatcher,其中有一部分程序需要安装驱动minispy,编译过程中报错 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2019 无法解析的外部符号 @ ...
- jQuery 实例
选择器 $(this).hide() 隐藏当前的 HTML 元素. $("p").hide() 隐藏所有 <p> 元素. $(".test").hi ...
- c# 24种设计模式
备忘录模式(Memento Pattern) 策略模式(Strategy Pattern) 抽象工厂模式(Abstract Factory Pattern) 代理模式(Proxy Pattern) 单 ...