UOJ_14_【UER #1】DZY Loves Graph_并查集

题面:http://uoj.ac/problem/14


考虑只有前两个操作怎么做。

每次删除一定是从后往前删,并且被删的边如果不是树边则没有影响,如果是树边也不存在边能替代。

直接删除这条边就可以。

于是用一个栈来保存现场,然后按秩合并的并查集维护就OK了。

现在有撤回操作,但根据上面对删边分析出的性质。

可以这样:

如果是插入一条边,然后撤回,相当于删边。

如果删边然后撤回,相当于什么也不做。

代码还是很好理解的。

代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <cmath>
using namespace std;
typedef long long ll;
#define N 500050
inline char nc() {
static char buf[100000],*p1,*p2;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
int rd() {
int x=0; char s=nc();
while(s<'0'||s>'9') s=nc();
while(s>='0'&&s<='9') x=(x<<3)+(x<<1)+s-'0',s=nc();
return x;
}
char rc() {
char s=nc();
while(s!='A'&&s!='D'&&s!='R'&&s!=EOF) s=nc();
return s;
}
int fa[N],S[N],top,ec[N],n,m,siz[N];
ll ev[N];
int find(int x) {return fa[x]==x?x:find(fa[x]);}
inline void output(int x) {printf("%lld\n",ec[x]==n-1?ev[x]:0ll);}
void add(int x,int y,int z) {
int dx=find(x),dy=find(y);
top++; ec[top]=ec[top-1]; ev[top]=ev[top-1];
if(dx==dy) S[top]=0;
else {
if(siz[dx]>siz[dy]) swap(dx,dy);
S[top]=dx; fa[dx]=dy; siz[dy]+=siz[dx]; ec[top]++; ev[top]+=z;
}
}
void del(int K) {
while(K--) {
int t=S[top--]; siz[fa[t]]-=siz[t]; fa[t]=t;
}
}
int main() {
n=rd(); m=rd();
int i,x,y;
for(i=1;i<=n;i++) fa[i]=i,siz[i]=1;
char s=rc();
for(i=1;i<=m;i++) {
if(s=='A') {
x=rd(); y=rd(); add(x,y,i);
output(top);
s=rc();
if(s=='R') del(1);
}else if(s=='D') {
x=rd();
output(top-x);
s=rc();
if(s!='R') del(x);
}else {
output(top); s=rc();
}
}
}

UOJ_14_【UER #1】DZY Loves Graph_并查集的更多相关文章

  1. UOJ14 DZY Loves Graph 并查集

    传送门 题意:给出一张$N$个点,最开始没有边的图,$M$次操作,操作为加入边(边权为当前的操作编号).删除前$K$大边.撤销前一次操作,每一次操作后询问最小生成树边权和.$N \leq 3 \tim ...

  2. cf444E. DZY Loves Planting(并查集)

    题意 题目链接 Sol 神仙题啊Orzzzzzz 考场上的时候直接把树扔了对着式子想,想1h都没得到啥有用的结论. 然后cf正解居然是网络流??出给NOIP模拟赛T1???¥%--&((--% ...

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

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

  4. [UER #1] DZY Loves Graph

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

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

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

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

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

  7. CF 445B DZY Loves Chemistry(并查集)

    题目链接: 传送门 DZY Loves Chemistry time limit per test:1 second     memory limit per test:256 megabytes D ...

  8. CodeForces 445B. DZY Loves Chemistry(并查集)

    转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://codeforces.com/problemset/prob ...

  9. 【UER #1】DZY Loves Graph

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

随机推荐

  1. 使用构建工具gradle打包时,遇到的中文问题和解决方式

    1.使用gradle  clean  war 命令将项目打成war包.这一过程gradle没有提示报错. 2.将得到的myapp.war复制到tomcat下webapps(部署war包) 3.启动to ...

  2. MFC——9.多线程与线程同步

    Lesson9:多线程与线程同步 程序.进程和线程是操作系统的重点,在计算机编程中.多线程技术是提高程序性能的重要手段. 本文主要解说操作系统中程序.进程和线程之间的关系,并通过相互排斥对象和事件对象 ...

  3. js时间戳格式化成日期格式的多种方法

    js需要把时间戳转为为普通格式,一般的情况下可能用不到的, 下面先来看第一种吧 复制代码代码如下: function getLocalTime(nS) { return new Date(parseI ...

  4. sublime3 支持 jsx 语法

    添加几个插件即可在js中快速写html babel 可以识别React,并高亮显示ES6 command+shift+p -> install package -> babel 使用 在打 ...

  5. IOS - unity3d错误Could not produce class with ID

    运行环境 Unity 5.3.5f1 (IL2CPP)编译IOS版本 XCode Version 7.2.1 (7C1002) Mac OS X 10.11.3 (15D21) (Mac mini) ...

  6. spring AOP(切面) 表达式介绍

    在 spring AOP(切面) 例子基础上对表达式进行介绍 1.添加接口删除方法 2.接口实现类 UserDaoServer 添加实现接口删除方法 3.测试类调用delUser方法 4. 输出结果截 ...

  7. iOS开发 两个内存错误的一般处理方法

    本文转载至 http://blog.sina.com.cn/s/blog_a843a8850101dxlj.html 由于iOS5.0之前没有自动应用计数机制,也没有Java那样的垃圾回收功能.我们都 ...

  8. 网页直播、微信直播技术解决方案:EasyNVR与EasyDSS流媒体服务器组合之区分不同场景下的easynvr

    近期遇到好多客户咨询关于实现微信直播.或者是将直播页面集成进入自己项目中. 该方案的主要目的:完成在公网一直进行内网摄像头的RTMP/HLS直播! 实现方案的具体实现: EasyNVR+EasyDSS ...

  9. java的Access restriction错误

    问 :import sun.management.ManagementFactory,我在rt包下已经找到sun.management.ManagementFactory,但就是有错,请问怎么回事. ...

  10. css多余字符显示省略号

    width:300px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; ;