题意:给出一张$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&#39;s Colorful Graph 并查集
D. Mr. Kitayuta's Colorful Graph Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/ ...
随机推荐
-
Oracle 表连接
Oracle 表之间的连接分为三种: 1. 内连接(自然连接) 2. 外连接 (1)左外连接 (左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接(左右两表都不 ...
-
ajax 页面加载
大体说说思路,不上代码了: 1.点击加载更多-> ajax向后台传参(当前页page,必须有默认1,其他需要的参数...) 2.后台接收 -> 查询数据 处理形成 json数据 给前台 3 ...
-
JS之BOM、客户端检测和DOM
这是第八章到第十二章的内容,粗略浏览过一遍. 一.BOM 浏览器对象模型.包括了window.location.navigator.screen和history对象. window:核心对象 1.JS ...
-
找回Win8.1(windows server 2012 R2)的双拼
一.微软拼音的选项,只能在metro界面修改: 鼠标移动到屏幕右下,出现metro的菜单,选"设置"然后选最下面的"更改电脑设置" 时间和设置->区域和语 ...
-
JavaScript——DOM操作——Window.document对象
一.找到元素: docunment.getElementById("id"):根据id找,最多找一个: var a =docunment.getElementById(&qu ...
-
js笔记---拖动元素
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
-
Song of Pi
def main(): pi = ' # 预先给出需要比较的值 t = int(raw_input()) for _ in xrange(t): song = raw_input().strip(). ...
-
CodeForces 701C	They Are Everywhere(map的应用)
这个题比较好的解决办法,我觉得还是map,map的size可以很快的知道我们选了几个字母,而且可以作为计数器,知道每一个字母出现了多少次, erase函数可以清除掉一个元素. 所以,定义两个指针L和R ...
-
使用XMLHttpRequest异步通信
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
-
Flask入门之完整项目搭建
一.创建虚拟环境 1,新建虚拟环境 cmd中输入:mkvirtualenv 环境名 2,在虚拟环境安装项目运行所需要的基本模块 pip install flask==0.12.4 pip instal ...