题解:

正解是可持久化并查集

但这个显然是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(待卡常数)的更多相关文章

  1. [UER #1] DZY Loves Graph

    题目描述 开始有 \(n\) 个点,现在对这 \(n\) 个点进行了 \(m\) 次操作,对于第 \(i\) 个操作(从 \(1\) 开始编号)有可能的三种情况: \(Add\) a b: 表示在 \ ...

  2. UOJ14 UER #1 DZY Loves Graph(最小生成树+并查集)

    显然可以用可持久化并查集实现.考虑更简单的做法.如果没有撤销操作,用带撤销并查集暴力模拟即可,复杂度显然可以均摊.加上撤销操作,删除操作的复杂度不再能均摊,但注意到我们在删除时就可以知道他会不会被撤销 ...

  3. 【UER #1】[UOJ#12]猜数 [UOJ#13]跳蚤OS [UOJ#14]DZY Loves Graph

    [UOJ#12][UER #1]猜数 试题描述 这一天,小Y.小D.小C正在愉快地玩耍. 小Y是个数学家,他一拍脑袋冒出了一个神奇的完全平方数 n. 小D是个机灵鬼,很快从小Y嘴里套出了 n的值.然后 ...

  4. 学长小清新题表之UOJ 14.DZY Loves Graph

    学长小清新题表之UOJ 14.DZY Loves Graph 题目描述 \(DZY\)开始有 \(n\) 个点,现在他对这 \(n\) 个点进行了 \(m\) 次操作,对于第 \(i\) 个操作(从 ...

  5. 【UER #1】DZY Loves Graph

    UOJ小清新题表 题目内容 UOJ链接 DZY开始有\(n\)个点,现在他对这\(n\)个点进行了\(m\)次操作,对于第\(i\)个操作(从\(1\)开始编号)有可能的三种情况: Add a b: ...

  6. 【UOJ #14】【UER #1】DZY Loves Graph

    http://uoj.ac/problem/14 题解很好的~ 不带路径压缩的并查集能保留树的原本形态. 按秩合并并查集可以不用路径压缩,但是因为此题要删除,如果把深度当为秩的话不好更新秩的值,所以把 ...

  7. uoj #14.【UER #1】DZY Loves Graph

    http://uoj.ac/problem/14 由于加入的边权递增,可以直接运行kruskal并支持撤销,但这样如果反复批量删边和撤销,时间复杂度会退化,因此需要对删边操作加上延时处理,只有在删边后 ...

  8. 2019.01.22 uoj#14. 【UER #1】DZY Loves Graph(并查集)

    传送门 题意简述: 要求支持以下操作: 在a与b之间连一条长度为i的边(i是操作编号):删除当前图中边权最大的k条边:表示撤销第 i−1次操作,保证第1次,第i−1 次不是撤回操作. 要求在每次操作后 ...

  9. UOJ14 DZY Loves Graph

    DZY开始有 nn 个点,现在他对这 nn 个点进行了 mm 次操作,对于第 ii 个操作(从 11 开始编号)有可能的三种情况: Add a b: 表示在 aa 与 bb 之间连了一条长度为 ii ...

随机推荐

  1. DOM-Document对象

     一. 整体介绍   这里介绍DOM对象中的Document对象. 何为Document对象?每个载入浏览器的HTML文档都会成为Document对象,Document对象可以帮助我们对所有的HTML ...

  2. python执行centos命令

    import os improt sys import re import commands a = commands.getoutput("ls -al /") print a

  3. @ImportResource 导入Spring 的xml配置文件

    在配置类尚标注此注解,等同于spring配置文件中的 <import resource="beans.xml"/> Spring Boot里面没有Spring的配置文件 ...

  4. Prezento – 轻量、简单的 jQuery 幻灯片插件

    Prezento 是一个超级简单的 jQuery 幻灯片插件.可以让你网页以新颖的交互方式呈现.另外,Prezento 支持响应式设计,配置项也很灵活,可以根据你需要的效果配置. 您可能感兴趣的相关文 ...

  5. This page is about building Firefox Desktop

    This page is about building Firefox Desktop The Mozilla build system, like the rest of the Mozilla c ...

  6. Redis(二)冰叔带你了解Redis-哨兵模式和高可用集群解析

    前言    Redis 的 主从复制 模式下,一旦 主节点 由于故障不能提供服务,需要手动将 从节点 晋升为 主节点,同时还要通知 客户端 更新 主节点地址,这种故障处理方式从一定程度上是无法接受的. ...

  7. Linux - openssl 加密

    openssl rand 15 -base64 # 口令生成 openssl sha1 filename # 哈希算法校验文件 openssl md5 filename # MD5校验文件 opens ...

  8. 初识java和C的不同

     学习java语言,发现C语言的语法尽管很类似,但是java的代码编写与C语言却大不相同. 一,java的类,首先接触到的是类这个思想,类中可以定义属性,可以用方法来对属性进行相应的操作: 二,jav ...

  9. J - Long Long Message (最长公共子串)

    题目链接:https://cn.vjudge.net/contest/283743#problem/J 题目大意:给你两个字符串,问你两个字符串的最长的公共子串. 具体思路:把两个字符串合在一起,然后 ...

  10. 【API】API函数创建用户,添加到管理组

    1 学习目标 使用API添加用户可以绕过某些杀毒软件的限制. 2 编程思路 2.1 代码原理 使用NetUserAdd这个API添加普通权限的用户,NetLocalGroupAddMembers这个A ...