题目链接

题目

题目描述

有 \(n\) 个城镇,城镇之间有 \(m\) 条道路相连,道路可以看成无向边。每一个城镇都有自己的一个繁荣度 \(v_i\) ,一个城镇 \(u\) 受到的影响 \(p\) 是与\(u\) 直接或者间接相连的所有城镇中,繁荣度的最大值。一个城镇 \(u\) 与城镇 \(v\) 是被视为直接或者间接相连的,当且仅当 \(u=v\) 或者从 \(u\) 出发,可以沿着某些道路到达 \(v\) 。为了减少维护成本,现准备拆除其中的某一些路。具体来说,你需要维护以下两种操作:

  1. ​ 'Q' \(a\),询问 \(a\) 城镇受到的影响 \(p\) ;
  2. ​ 'D' \(a\ b\) ,删除 \(a\ b\) 之间的道路。

输入描述

第一行输入两个整数 \(n,m(1\le n,m \le 10^5)\) ,分别表示城镇的数量和道路的数量。第二行输入 \(n\) 个整数 \(v_1,v_2,...,v_n(1\le v_i \le 10^9)\) ,分别表示每一个城镇的繁荣度。接下来 \(m\) 行,每行两个整数 \(u,v(1\le u,v \le n)\) ,表示城镇 \(u,v\) 之间有一条道路连接。保证不含有重边、自环。

接下来一行,输入一个整数 \(Q(1\le Q \le 10^5)\) ,表示操作的个数。

接下来 \(Q\) 行,每行描述一个操作,以'Q' \(a(1\le a \le n)\) 或者'D' \(a\ b(1\le a,b \le n)\) 的形式给出。对于删除操作,保证被删除的道路是存在的。

输出描述

对于每一个操作1,你都需要输出一个整数 \(p\) ,表示城镇 \(a\) 受到的影响。

示例1

输入

4 3
1 2 3 4
1 2
2 3
3 4
4
Q 1
D 2 3
Q 1
Q 3

输出

4
2
4

题解

知识点:并查集,离线。

普通并查集不支持撤销操作,这使得这道题难以解答,但转换一下思路,撤销的逆过程是新增,是并查集适用的操作,于是可以保存所有访问数据,离线逆向处理,再将答案保存最后输出即可。

时间复杂度 \(O((m \log n + q)\log q + n)\)

空间复杂度 \(O(q+n+m)\)

代码

#include <bits/stdc++.h>

using namespace std;

int w[100007];
int u[100007], v[100007];
int du[100007], dv[100007];
set<pair<int, int>> s;
int fa[100007];
int ans[100007]; int find(int x) {
return fa[x] == x ? x : fa[x] = find(fa[x]);
} void merge(int x, int y) {
int rx = find(x);
int ry = find(y);
if (w[rx] < w[ry]) fa[rx] = ry;
else fa[ry] = rx;
} int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n, m;
cin >> n >> m;
for (int i = 1;i <= n;i++) fa[i] = i;
for (int i = 1;i <= n;i++) cin >> w[i];
for (int i = 1;i <= m;i++) cin >> u[i] >> v[i];
int q;
cin >> q;
for (int i = 1;i <= q;i++) {
char op;
cin >> op;
if (op == 'Q') cin >> du[i];
else if (op == 'D') {
cin >> du[i] >> dv[i];
s.insert({ du[i],dv[i] });
s.insert({ dv[i],du[i] });
}
}
for (int i = 1;i <= m;i++)
if (s.find({ u[i],v[i] }) == s.end())
merge(u[i], v[i]);
for (int i = q;i >= 1;i--) {
if (dv[i]) merge(du[i], dv[i]);
else ans[i] = w[find(du[i])];
}
for (int i = 1;i <= q;i++) {
if (ans[i]) cout << ans[i] << '\n';
}
return 0;
}

NC235745 拆路的更多相关文章

  1. 【题解】逐个击破 luogu2700

    题目 题目描述: 现在有N个城市,其中K个被敌方军团占领了,N个城市间有N-1条公路相连,破坏其中某条公路的代价是已知的. 现在,告诉你K个敌方军团所在的城市,以及所有公路破坏的代价,请你算出花费最少 ...

  2. HDU 6201 transaction transaction transaction(拆点最长路)

    transaction transaction transaction Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 132768/1 ...

  3. BZOJ.2834.回家的路(最短路Dijkstra 拆点)

    题目链接 对于相邻的.处在同在一行或一列的车站连边,然后用dis[x][0/1](或者拆点)分别表示之前是从横边还是竖边到x的,跑最短路. 我选择拆点.. //13028kb 604ms #inclu ...

  4. [Java开发之路](23)装箱与拆箱

    1. 简单介绍 大家对基本数据类型都很熟悉.比如 int.float.double.boolean.char 等.基本数据类型是不具备对象的特性,比方基本类型不能调用方法.功能简单. ..,为了让基本 ...

  5. [转载]Web前端开发工程师编程能力飞升之路

    [背景] 如果你是刚进入web前端研发领域,想试试这潭水有多深,看这篇文章吧:如果你是做了两三年web产品前端研发,迷茫找不着提高之路,看这篇文章吧:如果你是四五年的前端开发高手,没有难题能难得住你的 ...

  6. 【转】Web前端研发工程师编程能力飞升之路

    分类: Javascript | 出自 海玉的博客 今天看到这篇文章.写的非常有意思.发现自己还有很长的一段路要走. [背景] 如果你是刚进入WEB前端研发领域,想试试这潭水有多深,看这篇文章吧: 如 ...

  7. hdu4289 最小割最大流 (拆点最大流)

    最小割最大流定理:(参考刘汝佳p369)增广路算法结束时,令已标号结点(a[u]>0的结点)集合为S,其他结点集合为T=V-S,则(S,T)是图的s-t最小割. Problem Descript ...

  8. 微博MySQL优化之路--dockone微信群分享

    微博MySQL优化之路 数据库是所有架构中不可缺少的一环,一旦数据库出现性能问题,那对整个系统都回来带灾难性的后果.并且数据库一旦出现问题,由于数据库天生有状态(分主从)带数据(一般还不小),所以出问 ...

  9. Web前端研发工程师编程能力飞升之路

    今天看到这篇文章.写的非常有意思,于是转载了.看看我们都处于什么的阶段. [背景] 如果你是刚进入web前端研发领域,想试试这潭水有多深,看这篇文章吧:如果你是做了两三年web产品前端研发,迷茫找不着 ...

  10. BZOJ-1877 晨跑 最小费用最大流+拆点

    其实我是不想做这种水题的QWQ,没办法,剧情需要 1877: [SDOI2009]晨跑 Time Limit: 4 Sec Memory Limit: 64 MB Submit: 1704 Solve ...

随机推荐

  1. 使用 nacos 搭建注册中心及配置中心

    本文为博主原创,转载请注明出处: 在分布式微服务框架中,现在都流行使用 nacos 作为分布式框架的注册中心与配置中心.当我们搭建一套spring boot 框架的时候,默认会将配置文件 放在 res ...

  2. 【JavaWeb】JSP基础和应用

    JSP基础 JSP简介 JSP全称是Java Server Page,它和Servlet一样,也是sun公司推出的一套开发动态web资源的技术,称为JSP/Servlet规范.JSP的本质其实就是一个 ...

  3. AHB Matrix

    常用的AHB Bus结构 AHB Matrix AHB Bus Matrix,即总线矩阵,其实际上就是一个互连(Interconnect).用于连接满足该总线协议的外设,包括Master和Slave. ...

  4. linux环境C语言实现:h264与pcm封装成AVI格式

    ​ 前言 拖了很久的AVI音视频封装实例,花了一天时间终于调完了,兼容性不是太好,但作为参考学习使用应该没有问题. RIFF和AVI以及WAV格式,可以参考前面的一些文章.这里详细介绍将一个H264视 ...

  5. [转帖]两种Nginx日志切分方案,狼厂主要在用第1种

    两种Nginx日志切分方案,狼厂主要在用第1种 nginx的日志切分问题一直是运维nginx时需要重点关注的.本文将简单说明下nginx支持的两种日志切分方式. 一.定时任务切分 所谓的定时任务切分, ...

  6. [转帖]Nginx 保留 Client 真实 IP

    https://lqingcloud.cn/post/nginx-01/#:~:text=%E5%9C%A8%20Nginx%20%E4%B8%AD%E5%8F%AF%E4%BB%A5%E9%80%9 ...

  7. [转帖]top指令如何查询指定用户的所有进程?

    有两种方法. 1.top指令与字符串查询指令通过通道配合查询. 指令:    "-d 5"指的是每五秒刷新一次进程列表,"grep"是字符串查询指令,它可以将含 ...

  8. [转帖]linux 查看CPU 内存的信息

    https://bbs.huaweicloud.com/blogs/302929   [摘要] ECS信息规格:2vCPUs | 4GiB | kc1.large.2镜像:openEuler 20.0 ...

  9. [转帖]队列深度对IO性能的影响

    https://www.modb.pro/db/43710 几年前一个客户的Oracle数据库经常HANG,老白帮他分析了一下,结论是存储老化,性能不足以支撑现有业务了.正好用户手头有个华为S5600 ...

  10. [转帖]Windows磁盘性能压测(2)-Fio

    http://www.manongjc.com/detail/59-qftscgqzitmxpaw.html 目录 一.腾讯云官网硬盘性能指标 二.使用fio测试硬盘性能指标 1. 测试工具相关 2. ...