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 ...
随机推荐
- 创建QT CREATOR对话框报错 linux QT Creator :-1: error: cannot find -lGL
装完QT5.4 及 QT Creator3.3 后 创建第一个QT Widgets Application(相当于窗体) 应用程序 报如上错误. 执行 sudo apt-get install lib ...
- 转:VS2010调试NUnit测试项目 (Running or debugging NUnit tests from Visual Studio without any extensions)
If you write unit tests and use NUnit test framework this may be helpful. I decided to write this si ...
- Python排列组合实验
import itertools 排列: 4个数内选2个 >>> print list(itertools.permutations([1,2,3,4],2)) [(1, 2), ( ...
- HTTP 协议的历史演变和设计思路
HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 更是让它成为技术热点. 本文介绍 HTTP 协议的历史演变和设计思路. 一.HTTP/0.9 HTTP 是基于 TCP ...
- (leetcode) countandsay
class Solution { public: string calcuate(string s) { string result; char pre = s[0]; int cnt = 1; fo ...
- detailsview 样式小问题
detailsview不显示表头,设置HeaderText=""就可以,不知道为什么,如果有值,其他方式都没有调好! 内网格显示为0,Gridlines="None&qu ...
- 12 Tips for Accurate Project Estimating
Projects typically involve many dynamic aspects, yet they're often constrained by finite conditions. ...
- IN和exists 之间的比较
IN和exists 之间的比较 NOT IN 和 NOT EXISTS之间的比较
- LeetCode Meeting Rooms
原题链接在这里:https://leetcode.com/problems/meeting-rooms/ Given an array of meeting time intervals consis ...
- zabbix监控activemq队列脚本
公司业务使用activemq5.9.1消息队列,由于队列阻塞导致程序端口无响应,并且telnet无法连通.经过over 1 hour的排查,最终定位原因activemq导致.遂写了一个监控active ...