bzoj2333 [SCOI2011]棘手的操作
用set维护每个联通块里的最值,multiset维护所有块里的最值,并查集维护连通性,然后随便搞搞就行了,合并时候采用启发式合并。复杂度O(nlognlogn),大概勉强过的程度,反正跑的很慢就是了。
代码
#include<cstdio>
#include<set>
#define mp make_pair
#define fi first
#define sc second
using namespace std;
const int N = ;
int f[N],add[N],n,i,a[N],q,u,v,cnt;
set<pair<int,int> > s[N];
set<pair<int,int> >::iterator it;
multiset<int> S;
multiset<int>::iterator It;
char str[];
int gf(int x)
{
int p=x,t;
while (p!=f[p]) p=f[p];
while (x!=p)
{
t=f[x];f[x]=p;x=t;
}
return p;
}
int main()
{
scanf("%d",&n);
for (i=;i<=n;i++)
{
scanf("%d",&a[i]);
f[i]=i;
s[i].insert(mp(a[i],i));
S.insert(a[i]);
}
scanf("%d",&q);
for (i=;i<=q;i++)
{
scanf("%s",str);
if (str[]=='F')
{
if (str[]=='')
{
scanf("%d",&u);
printf("%d\n",a[u]+add[gf(u)]+cnt);
}
else
if (str[]=='')
{
scanf("%d",&u);
printf("%d\n",(*(--s[gf(u)].end())).fi+add[gf(u)]+cnt);
}
else
printf("%d\n",*(--S.end())+cnt);
} if (str[]=='A')
{
if (str[]=='')
{
scanf("%d%d",&u,&v);
S.erase(S.find((*(--s[gf(u)].end())).fi+add[gf(u)]));
s[gf(u)].erase(mp(a[u],u));
a[u]+=v;
s[gf(u)].insert(mp(a[u],u));
S.insert((*(--s[gf(u)].end())).fi+add[gf(u)]);
}
else
if (str[]=='')
{
scanf("%d%d",&u,&v);
S.erase(S.find((*(--s[gf(u)].end())).fi+add[gf(u)]));
add[gf(u)]+=v;
S.insert((*(--s[gf(u)].end())).fi+add[gf(u)]);
}
else
{
scanf("%d",&u);
cnt+=u;
}
} if (str[]=='U')
{
scanf("%d%d",&u,&v);
u=gf(u);v=gf(v);
if (u!=v)
{
if (s[u].size()>s[v].size()) u^=v^=u^=v;
S.erase(S.find((*(--s[gf(u)].end())).fi+add[gf(u)]));
S.erase(S.find((*(--s[gf(v)].end())).fi+add[gf(v)]));
f[u]=v;
for (it=s[u].begin();it!=s[u].end();it++)
{
a[(*it).sc]=(*it).fi+add[u]-add[v];
s[v].insert(mp(a[(*it).sc],(*it).sc));
}
S.insert((*(--s[gf(v)].end())).fi+add[gf(v)]);
s[u].clear();
}
}
}
}
bzoj2333 [SCOI2011]棘手的操作的更多相关文章
- 真--可并堆模板--BZOJ2333: [SCOI2011]棘手的操作
n<=300000个点,开始是独立的,m<=300000个操作: 方法一:单点修改.查询,区间修改.查询?等等等等这里修改是块修改不是连续的啊,那就让他连续呗!具体方法:离线后,每次连接两 ...
- 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 读入所有数据,先模拟一遍所有的合并操作 我们不关心联通块长什么样,只关心联通块内有谁 所以可以 ...
- 2019.01.17 bzoj2333: [SCOI2011]棘手的操作(启发式合并)
传送门 启发式合并菜题. 题意:支持与连通块有关的几种操作. 要求支持连边,单点修改,连通块修改,全局修改和单点查值,连通块查最大值和全局最大值. 我们对每个连通块和答案用可删堆维护最大值,然后用启发 ...
- BZOJ2333:[SCOI2011]棘手的操作(Splay)
Description 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来有如下一些操作: U x y: 加一条边,连接第x个节点和第y个节点 A1 x v: ...
- 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]棘手的操作
题面 戳我 Sol 右偏树滑稽+并查集 再在全局开一个可删除的堆(priority_queue) 注意细节 # include <bits/stdc++.h> # define RG re ...
随机推荐
- day12
JSP指令 JSP指令概述 JSP指令的格式:<%@指令名 attr1="" attr2="" %>,一般都会把JSP指令放到JSP文件的最上方 ...
- 实例讲述PHP面向对象的特性;;;php中const与define的使用区别
php中const与define的使用区别 1.const:类成员变量定义,一旦定义且不能改变其值. define:定义全局常量,在任何地方都可以访问.2.define:不能在类中定义,而const可 ...
- linq查询结果指定列的两种方式
方式一: var results = from product in products orderby product.Price descending select new { product.Na ...
- 【android学习2】:Eclipse中HttpServlet类找不到
Eclipse中使用的HttpServlet类之所以识别不到的原因是没有导入Servlet-api.jar包,这个包在所安装在的tomcat的lib文件下,所以只需要导入即可. 在需要导入的工程上右键 ...
- MFC之向导页、消息框、文件选择、字体、颜色(三)
属性页对话框的分类 属性页对话框想必大家并不陌生,XP系统中桌面右键点属性,弹出的就是属性页对话框,它通过标签切换各个页面.另外,我们在创建MFC工程时使用的向导对话框也属于属性页对话框,它通过点击“ ...
- 将option添加到select框
var select=document.createElement("select"); select.setAttribute("class","f ...
- iOS开发中(null)与<null>的判断
判断(null): if(m_result==nil) { NSLog(@"KDA!"); } 判断<null>: if([m_result isEqual: ...
- SQL Server数据库中还原孤立用户的方法集合
虽然SQL Server现在搬迁的技术越来越多,自带的方法也越来越高级. 但是我们的SQL Server在搬迁的会出现很多孤立用户,微软没有自动的处理. 因为我们的数据库权限表都不会在应用数据库中,但 ...
- Java遇见HTML——JSP篇之JSP基础语法
一.JSP简介 JSP全名为Java Server Pages,Java服务器端页面,其根本是一个简化的Servlet设计,它实现了在Java中使用HTML标签.Jsp是一种动态网页技术标准,是在服务 ...
- javascript实例学习之六—百叶窗效果
一.要结合布局才能形成百叶窗的效果 二.开启两个定时器,第一个定时器控制的是百叶窗整体一次上翻,一次下翻:另一个控制百叶窗中的各页逐次翻转,形成层次效果.否则就成了普通的滚动广告的效果了 本实现借助于 ...