UOJ14 DZY Loves Graph 并查集
题意:给出一张$N$个点,最开始没有边的图,$M$次操作,操作为加入边(边权为当前的操作编号)、删除前$K$大边、撤销前一次操作,每一次操作后询问最小生成树边权和。$N \leq 3 \times 10^5 , M \leq 5 \times 10^5$
可以发现可以直接大力用并查集做,因为一条边只要合并了两个集合就能产生贡献。
关于删除可以将边的加入扔到栈里面,删除的时候不断弹栈即可。
撤销操作对于加边就是删掉了一条边,而对于删边就相当于什么都不做,直接做即可。
加入每一条边之后的答案要一起放在栈里面,这样删边+撤销的答案询问就可以$O(1)$解决。
#include<bits/stdc++.h>
using namespace std;
inline int read(){
;
;
char c = getchar();
while(!isdigit(c)){
if(c == '-')
f = ;
c = getchar();
}
while(isdigit(c)){
a = (a << ) + (a << ) + (c ^ ');
c = getchar();
}
return f ? -a : a;
}
, MAXM = ;
int fa[MAXN] , size[MAXN] , top , N , M , lasStep;
];
bool isadd;
];
inline int find(int x){
while(fa[x] != x)
x = fa[x];
return x;
}
inline void init(){
; i <= N ; i++){
fa[i] = i;
size[i] = ;
}
}
inline void merge(int a , int b , int k){
a = find(a);
b = find(b);
if(a != b){
if(size[a] > size[b])
swap(a , b);
fa[a] = b;
size[b] += size[a];
s[++top][] = a;
s[top][] = b;
s[top][] = s[top - ][] + k;
s[top][] = s[top - ][] + ;
}
else{
s[top][] = s[++top][] = ;
s[top][] = s[top - ][];
s[top][] = s[top - ][];
}
}
inline void pop(int k){
while(k--){
]){
size[s[top][]] -= size[s[top][]];
fa[s[top][]] = s[top][];
}
top--;
}
}
int main(){
N = read();
M = read();
init();
scanf("%s",ss);
; i <= M ; i++){
] == 'A'){
merge(read() , read() , i);
cout << (s[top][] == N - ? s[top][] : 0ll) << '\n';
if(i == M)
break;
scanf("%s",ss);
] == 'R')
pop();
}
else
] == 'D'){
lasStep = read();
cout << (s[top - lasStep][] == N - ? s[top - lasStep][] : 0ll) << '\n';
if(i == M)
break;
scanf("%s",ss);
] != 'R')
pop(lasStep);
}
else{
cout << (s[top][] == N - ? s[top][] : 0ll) << '\n';
if(i == M)
break;
scanf("%s",ss);
}
}
;
}
UOJ14 DZY Loves Graph 并查集的更多相关文章
- UOJ_14_【UER #1】DZY Loves Graph_并查集
UOJ_14_[UER #1]DZY Loves Graph_并查集 题面:http://uoj.ac/problem/14 考虑只有前两个操作怎么做. 每次删除一定是从后往前删,并且被删的边如果不是 ...
- UOJ14 DZY Loves Graph
DZY开始有 nn 个点,现在他对这 nn 个点进行了 mm 次操作,对于第 ii 个操作(从 11 开始编号)有可能的三种情况: Add a b: 表示在 aa 与 bb 之间连了一条长度为 ii ...
- cf444E. DZY Loves Planting(并查集)
题意 题目链接 Sol 神仙题啊Orzzzzzz 考场上的时候直接把树扔了对着式子想,想1h都没得到啥有用的结论. 然后cf正解居然是网络流??出给NOIP模拟赛T1???¥%--&((--% ...
- 【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\) 个操作(从 ...
- UOJ14 UER #1 DZY Loves Graph(最小生成树+并查集)
显然可以用可持久化并查集实现.考虑更简单的做法.如果没有撤销操作,用带撤销并查集暴力模拟即可,复杂度显然可以均摊.加上撤销操作,删除操作的复杂度不再能均摊,但注意到我们在删除时就可以知道他会不会被撤销 ...
- 2019.01.22 uoj#14. 【UER #1】DZY Loves Graph(并查集)
传送门 题意简述: 要求支持以下操作: 在a与b之间连一条长度为i的边(i是操作编号):删除当前图中边权最大的k条边:表示撤销第 i−1次操作,保证第1次,第i−1 次不是撤回操作. 要求在每次操作后 ...
- [UER #1] DZY Loves Graph
题目描述 开始有 \(n\) 个点,现在对这 \(n\) 个点进行了 \(m\) 次操作,对于第 \(i\) 个操作(从 \(1\) 开始编号)有可能的三种情况: \(Add\) a b: 表示在 \ ...
- Codeforces Round #286 (Div. 1) D. Mr. Kitayuta's Colorful Graph 并查集
D. Mr. Kitayuta's Colorful Graph Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/ ...
随机推荐
- ActiveReports公开课开启报名,学习如何解决中国式复杂报表难题
ActiveReports实战教学 90分钟解决中国式复杂报表六大需求 [开课时间]4月19日 [主讲老师]葡萄城资深报表专家 [培训方式]网络在线公开课 报名地址
- JavaScript长时间未操作自动退出登录
主要是通过mouseover 来监听有没有进行当前页面操作,通过未操作时间和设定退出的时间做比较,从而退出登录. var oldTime = new Date().getTime(); var new ...
- LoadRunner11录制脚本出现的问题
问题一:无法启动IE浏览器 原因:设置录制程序的录制填写错误,因为IE有两个一个是32位的一个是64位的 我们需要设置浏览器为IE 32位即可正常运行 问题二:无法录制百度等官网页面 原因:录制选项中 ...
- 聊聊setTimeout和setInterval线程
在聊setTimeout和setInterval这两个事件的前,先聊另外一个与之密切关联的知识点,那就是线程(thread).而线程有常常跟另外一个词语--“进程”一起出现.那么何为线程?何为线程呢? ...
- BigDecimal遇到的问题,大伙也说说
一:相除精度丢失的问题 BigDecimal的api除法相对加减乘要实现的复杂多了,只介绍常用的我遇到的问题: 问题:两数相除,如果9/3=3整除没问题,但是10/3=0.33333333...... ...
- go 排序sort的使用
已知一个的struct组成的数组,现在要按照数组中的一个字段排序.python有sort方法,那golang要怎么实现呢?其实golang也有sort方法,并且使用简单,功能强大. 我们先看一下sor ...
- Appium学习——安装appium Server
安装appium Server 下载地址:百度网盘的下载链接:https://pan.baidu.com/s/1pKMwdfX 下载后, AppiumForWindows.zip 进行解压,点击 ap ...
- awk实战演示
awk:报告生成器,格式化文本输出. 我们一般使用的awk命令其实就是gawk,在centos7系统下,awk是gawk的链接文件. 基本用法:gawk [options] 'program' FI ...
- 变量计算——强制类型转换的js面试题
console.log(1+"2"+"2"); console.log(1++"2"+"2"); console.log ...
- web页面中快速找到html对应元素两种方法
一.第一种方法(通过先进入开发模式然后再去选择网页元素) 1.打开IE.Chrome.FireFox等,按 F12 键进入开发模式 2.在打开的控制窗口左上角有个 箭头 按钮,点击它之后,此时将鼠标 ...