【UER #1】DZY Loves Graph(待卡常数)
题解:
正解是可持久化并查集
但这个显然是lct可以维护的
但这常数是个问题啊???
#include <bits/stdc++.h>
using namespace std;
struct re{
int a,b,c;
};
const int N=5e5;
int fa[N],ls[N],rs[N],v[N];
int cnt,last,last1,last2,n,m,ans;
bool rev[N];
deque<re> q1,q2;
void down(int x)
{
if (!rev[x]) return;
swap(ls[x],rs[x]);
rev[ls[x]]^=; rev[rs[x]]^=;
rev[x]=;
}
bool pd(int x)
{
if (ls[fa[x]]!=x&&rs[fa[x]]!=x) return();
else return ();
}
void rotate(int x,int y)
{
int fath=fa[x];
if (y==)
{
rs[fath]=ls[x];
if (ls[x]) fa[ls[x]]=fath;
} else
{
ls[fath]=rs[x];
if (rs[x]) fa[rs[x]]=fath;
}
fa[x]=fa[fath];
if (pd(fath))
{
if (ls[fa[x]]==fath) ls[fa[x]]=x;
else rs[fa[x]]=x;
}
fa[fath]=x;
if (y==) ls[x]=fath; else rs[x]=fath;
}
void dfs(int x)
{
if (pd(x)) dfs(fa[x]);
down(x);
}
void splay(int x)
{
dfs(x);
int fath=fa[x];
while (pd(x))
{
if (!pd(fa[x]))
{
if (x==ls[fa[x]]) rotate(x,);
else rotate(x,);
} else
{
if (ls[fa[fath]]==fath)
if (ls[fath]==x) rotate(fath,),rotate(x,);
else rotate(x,),rotate(x,);
else if (rs[fath]==x) rotate(fath,),rotate(x,);
else rotate(x,),rotate(x,);
}
fath=fa[x];
}
}
void access(int x)
{
for (int y=;x;y=x,x=fa[x])
{
splay(x); rs[x]=y;
}
}
void makeroot(int x)
{
access(x);
splay(x);
rev[x]^=;
}
int findroot(int x)
{
access(x);
splay(x);
while (ls[x]) x=ls[x];
return x;
}
bool find (int x,int y)
{
makeroot(x);
if (findroot(y)==x) return ;
else return ;
}
void link(int x,int y)
{
//**
//cout<<x<<" "<<y<<endl;
//**
makeroot(x);
fa[x]=y;
}
void cut(int x,int y)
{
makeroot(x);
access(y);
splay(y);
ls[y]=fa[x]=;
}
char c[];
int main()
{
freopen("noip.in","r",stdin);
freopen("noip.out","w",stdout);
std::ios::sync_with_stdio(false);
cin>>n>>m;
for (int i=;i<=m;i++)
{
cin>>c;int x,y;
if (c[]=='A')
{
cin>>x>>y;
re a; a.a=x; a.b=y; a.c=i; q1.push_back(a);
if (!find(x,y))
{
cnt++; ans+=i;
link(x,i+n);
link(i+n,y);
v[i+n]=i;
}
last=; last1=x; last2=y;
}
if (c[]=='D')
{
last=;
cin>>x; q2.clear();
for (int i=;i<=x;i++)
{
re y=q1.back(); q1.pop_back(); q2.push_back(y);
if (find(y.a,y.c+n))
{
cut(y.a,y.c+n); cut(y.b,y.c+n);
cnt--; ans-=y.c;
}
}
}
if (c[]=='R')
{
if (last==)
{
if (find(last1,i-+n))
{
cut(last1,i-+n); cut(last2,i-+n);
cnt--; ans-=i-;
}
q1.pop_back();
} else
{
while (!q2.empty())
{
re x=q2.back(); q2.pop_back();
q1.push_back(x);
if (!find(x.a,x.b))
{
cnt++; ans+=x.c;
link(x.a,x.c+n);
link(x.b,x.c+n);
}
}
}
}
if (cnt==n-) cout<<ans; else cout<<;
cout<<endl;
}
return ;
}
【UER #1】DZY Loves Graph(待卡常数)的更多相关文章
- [UER #1] DZY Loves Graph
题目描述 开始有 \(n\) 个点,现在对这 \(n\) 个点进行了 \(m\) 次操作,对于第 \(i\) 个操作(从 \(1\) 开始编号)有可能的三种情况: \(Add\) a b: 表示在 \ ...
- UOJ14 UER #1 DZY Loves Graph(最小生成树+并查集)
显然可以用可持久化并查集实现.考虑更简单的做法.如果没有撤销操作,用带撤销并查集暴力模拟即可,复杂度显然可以均摊.加上撤销操作,删除操作的复杂度不再能均摊,但注意到我们在删除时就可以知道他会不会被撤销 ...
- 【UER #1】[UOJ#12]猜数 [UOJ#13]跳蚤OS [UOJ#14]DZY Loves Graph
[UOJ#12][UER #1]猜数 试题描述 这一天,小Y.小D.小C正在愉快地玩耍. 小Y是个数学家,他一拍脑袋冒出了一个神奇的完全平方数 n. 小D是个机灵鬼,很快从小Y嘴里套出了 n的值.然后 ...
- 学长小清新题表之UOJ 14.DZY Loves Graph
学长小清新题表之UOJ 14.DZY Loves Graph 题目描述 \(DZY\)开始有 \(n\) 个点,现在他对这 \(n\) 个点进行了 \(m\) 次操作,对于第 \(i\) 个操作(从 ...
- 【UER #1】DZY Loves Graph
UOJ小清新题表 题目内容 UOJ链接 DZY开始有\(n\)个点,现在他对这\(n\)个点进行了\(m\)次操作,对于第\(i\)个操作(从\(1\)开始编号)有可能的三种情况: Add a b: ...
- 【UOJ #14】【UER #1】DZY Loves Graph
http://uoj.ac/problem/14 题解很好的~ 不带路径压缩的并查集能保留树的原本形态. 按秩合并并查集可以不用路径压缩,但是因为此题要删除,如果把深度当为秩的话不好更新秩的值,所以把 ...
- uoj #14.【UER #1】DZY Loves Graph
http://uoj.ac/problem/14 由于加入的边权递增,可以直接运行kruskal并支持撤销,但这样如果反复批量删边和撤销,时间复杂度会退化,因此需要对删边操作加上延时处理,只有在删边后 ...
- 2019.01.22 uoj#14. 【UER #1】DZY Loves Graph(并查集)
传送门 题意简述: 要求支持以下操作: 在a与b之间连一条长度为i的边(i是操作编号):删除当前图中边权最大的k条边:表示撤销第 i−1次操作,保证第1次,第i−1 次不是撤回操作. 要求在每次操作后 ...
- UOJ14 DZY Loves Graph
DZY开始有 nn 个点,现在他对这 nn 个点进行了 mm 次操作,对于第 ii 个操作(从 11 开始编号)有可能的三种情况: Add a b: 表示在 aa 与 bb 之间连了一条长度为 ii ...
随机推荐
- buildroot构建项目(五)--- u-boot 2017.11 适配开发板修改 3 ---- 系统启动初始化之二
一.cpu_init_crit 当执行完时钟初始化后,程序执行: bl cpu_init_crit 跳转到CPU初始化处进行,在其中主要是执行 caches 的关闭 和 MMU的关闭,之后跳转到 ...
- node.js 找不到 xxx 模块解决办法
node.js找不到xxx 这个模块的解决方法. 按顺序来. 1.检查一下是否拼写错误. 2.这个模块是自己写的,是的话.检查一下路径是否正确. 3.如果是导入的模块.用 npm list这个命令输出 ...
- Linux下搭建gtk+2.0开发环境
安装gtk2.0 sudo apt-get install libgtk2.0-dev 查看 2.x 版本 pkg-config --modversion gtk+-2.0 #有可能需要sudo ap ...
- C - Least Crucial Node
题目链接:https://cn.vjudge.net/contest/247936#problem/C 具体大意:给你起点和中点,总点数,边数.求到终点的最小割点. 具体思路:可以用tarjan算法来 ...
- cetus系列~安装和基本配置
cetus系列一 安装 1 安装软件环境 yum install cmake gcc glib2-devel flex mysql-devel gperftools-libs bison f ...
- d 属性: 赋予字段执行动作的能力
1.对只读属性误解 property AppSetting: ISuperobject read fAppSetting;当看到 AppInfo.AppSetting.D['lastLat'] := ...
- Java编程:悲观锁、乐观锁的区别及使用场景
定义: 悲观锁(Pessimistic Lock): 每次获取数据的时候,都会担心数据被修改,所以每次获取数据的时候都会进行加锁,确保在自己使用的过程中数据不会被别人修改,使用完成后进行数据解锁.由于 ...
- linux 网卡
查看网卡UUID:nmcli con show 或 nmcli con list 查看网卡mac地址:nmcli dev show 或 nmcli dev list 注:sho ...
- 身份证号校验原理及JavaScript实现
在网站中,总有各种各样的表单,用户使用表单来向服务器发送数据,进行交互. 然而,代代相传的经验是,永远不要信任用户的输入,一定要对数据进行验证.如果使用不经验证的表单,轻则会有大量无效提交 ...
- ES系列三、基本知识准备
一.基础概念 1.索引 索引(index)是elasticsearch的一个逻辑存储,可以理解为关系型数据库中的数据库,es可以把索引数据存放到一台服务器上,也可以sharding后存到多台服务器上, ...