【UOJ #14】【UER #1】DZY Loves Graph
http://uoj.ac/problem/14
题解很好的~
不带路径压缩的并查集能保留树的原本形态。
按秩合并并查集可以不用路径压缩,但是因为此题要删除,如果把深度当为秩的话不好更新秩的值,所以把子树大小当为秩。
合并直接合并,删除直接删除,每条边只会被添加进树一次,至多被删除一次。
离线特殊考虑一下return的情况就可以了QwQ
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N = 300003;
const int M = 500003;
int in() {
int k = 0; char c = getchar();
for(; c < '0' || c > '9'; c = getchar());
for(; c >= '0' && c <= '9'; c = getchar())
k = k * 10 + c - 48;
return k;
}
int fa[N], sz[N], q[M], tail = 0, intree[M], n, m, cnt = 0;
ll ans[M], treesum = 0;
int find(int x) {return fa[x] == x ? x : find(fa[x]);}
void merge(int x, int y, int len) {
x = find(x); y = find(y);
q[++tail] = len;
if (x == y)
intree[len] = -1;
else {
++cnt;
treesum += (ll) len;
if (sz[x] > sz[y]) swap(x, y);
intree[len] = x;
fa[x] = y;
sz[y] += sz[x];
while (fa[y] != y) {
y = fa[y];
sz[y] += sz[x];
}
}
}
void del() {
int x = q[tail--];
if (intree[x] == -1) return;
--cnt;
treesum -= x;
x = intree[x];
int y = fa[x];
sz[y] -= sz[x];
while (fa[y] != y) {
y = fa[y];
sz[y] -= sz[x];
}
fa[x] = x;
}
char c[20];
struct node {
char op;
int x, y;
} Q[M];
int main() {
n = in(); m = in();
for(int i = 1; i <= m; ++i) {
scanf("%s", c);
if ((Q[i].op = c[0]) == 'R') continue;
Q[i].x = in();
if (c[0] == 'A')
Q[i].y = in();
}
for(int i = 1; i <= n; ++i)
fa[i] = i, sz[i] = 1;
for(int i = 1; i <= m; ++i) {
switch (Q[i].op) {
case 'A':
merge(Q[i].x, Q[i].y, i);
printf("%lld\n", ans[tail] = cnt < n - 1 ? 0 : treesum);
break;
case 'D':
if (Q[i + 1].op == 'R') {
printf("%lld\n", ans[tail - Q[i].x]);
printf("%lld\n", ans[tail]);
} else {
for(int j = 1; j <= Q[i].x; ++j)
del();
printf("%lld\n", ans[tail]);
}
break;
case 'R':
if (Q[i - 1].op == 'A') {
del();
printf("%lld\n", ans[tail]);
}
break;
}
}
return 0;
}
【UOJ #14】【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\) 个操作(从 ...
- 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 次不是撤回操作. 要求在每次操作后 ...
- 【UER #1】DZY Loves Graph
UOJ小清新题表 题目内容 UOJ链接 DZY开始有\(n\)个点,现在他对这\(n\)个点进行了\(m\)次操作,对于第\(i\)个操作(从\(1\)开始编号)有可能的三种情况: Add a b: ...
- 【dp入门题】【跟着14练dp吧...囧】
A HDU_2048 数塔 dp入门题——数塔问题:求路径的最大和: 状态方程: dp[i][j] = max(dp[i+1][j], dp[i+1][j+1])+a[i][j];dp[n][j] = ...
- 【UER #1】DZY Loves Graph(待卡常数)
题解: 正解是可持久化并查集 但这个显然是lct可以维护的 但这常数是个问题啊??? #include <bits/stdc++.h> using namespace std; struc ...
- uoj problem 14 DZY Loves Graph
题目: DZY开始有 \(n\) 个点,现在他对这 \(n\) 个点进行了 \(m\) 次操作,对于第 \(i\) 个操作(从 \(1\) 开始编号)有可能的三种情况: Add a b: 表示在 \( ...
- UOJ14 UER #1 DZY Loves Graph(最小生成树+并查集)
显然可以用可持久化并查集实现.考虑更简单的做法.如果没有撤销操作,用带撤销并查集暴力模拟即可,复杂度显然可以均摊.加上撤销操作,删除操作的复杂度不再能均摊,但注意到我们在删除时就可以知道他会不会被撤销 ...
随机推荐
- Html5的一些基础知识
<!DOCTYPE html><html><head><meta charset="utf-8" /><title>页面 ...
- C# .net dotnet属性定义属性,以提供显示明称,默认值
//使用显示名称初始化 System.ComponentModel.DisplayNameAttribute 类的新实例. displayName 显示名称 [DisplayName("we ...
- Java怎么导入一个项目?
1.首先安装 >> Java开发环境MyEclipse或者Eclipse.(我用的是Myeclipse) 2.打开 >> MyEclipse >> fi ...
- Linux监控工具介绍系列——free
在Linux系统中,我们查看.监控系统内存使用情况,一般最常用的命令就是free.free命令其实非常简单,参数也非常简单,但是里面很多知识点未必你都掌握了.下面总结一下我所了解的free命令.如有不 ...
- 正则表达式解析URL
正则表达式: var match = /^((ht|f)tps?:)\/\/([\w-]+(\.[\w-]+)*\/){1}(([\w-]+(\.[\w-]+)*\/?)*)?(\?([\w\-\., ...
- java 版本EChart使用
一.简介 EChart是百度开发的js图表软件,用它我们可以很方便地以图形化的方式对数据进行分析统计.该种方式js在页面动态拼接json数据,再进行渲染.这种方法的优点是,灵活,可以随时进行修改.缺点 ...
- docker-8 docker小技巧
docker使用小技巧 杀死所有正在运行的容器 docker kill $(docker ps -a -q) 删除所有的已经停止的容器 docker rm $(docker ps -a -q) 删除所 ...
- eclipse svn分支与合并操作
以前做项目的时候没有用过svn的分支合并操作,今天用到了,刚开始还真不会啊.最后查了下就是这么的方便.专门记录下来. 原文来自:http://blog.csdn.net/lisq037/article ...
- mysql explain的使用(优化查询)
explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 1.创建数据库 创建的sql语句如下: /* Navicat MySQL D ...
- EF 资料
初级部分 入门教程 Learn Entity Framework(微软官方) http://www.entityframeworktutorial.net/ Fluent API http ...