NC235745 拆路
题目
题目描述
有 \(n\) 个城镇,城镇之间有 \(m\) 条道路相连,道路可以看成无向边。每一个城镇都有自己的一个繁荣度 \(v_i\) ,一个城镇 \(u\) 受到的影响 \(p\) 是与\(u\) 直接或者间接相连的所有城镇中,繁荣度的最大值。一个城镇 \(u\) 与城镇 \(v\) 是被视为直接或者间接相连的,当且仅当 \(u=v\) 或者从 \(u\) 出发,可以沿着某些道路到达 \(v\) 。为了减少维护成本,现准备拆除其中的某一些路。具体来说,你需要维护以下两种操作:
- 'Q' \(a\),询问 \(a\) 城镇受到的影响 \(p\) ;
- '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 拆路的更多相关文章
- 【题解】逐个击破 luogu2700
题目 题目描述: 现在有N个城市,其中K个被敌方军团占领了,N个城市间有N-1条公路相连,破坏其中某条公路的代价是已知的. 现在,告诉你K个敌方军团所在的城市,以及所有公路破坏的代价,请你算出花费最少 ...
- HDU 6201 transaction transaction transaction(拆点最长路)
transaction transaction transaction Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 132768/1 ...
- BZOJ.2834.回家的路(最短路Dijkstra 拆点)
题目链接 对于相邻的.处在同在一行或一列的车站连边,然后用dis[x][0/1](或者拆点)分别表示之前是从横边还是竖边到x的,跑最短路. 我选择拆点.. //13028kb 604ms #inclu ...
- [Java开发之路](23)装箱与拆箱
1. 简单介绍 大家对基本数据类型都很熟悉.比如 int.float.double.boolean.char 等.基本数据类型是不具备对象的特性,比方基本类型不能调用方法.功能简单. ..,为了让基本 ...
- [转载]Web前端开发工程师编程能力飞升之路
[背景] 如果你是刚进入web前端研发领域,想试试这潭水有多深,看这篇文章吧:如果你是做了两三年web产品前端研发,迷茫找不着提高之路,看这篇文章吧:如果你是四五年的前端开发高手,没有难题能难得住你的 ...
- 【转】Web前端研发工程师编程能力飞升之路
分类: Javascript | 出自 海玉的博客 今天看到这篇文章.写的非常有意思.发现自己还有很长的一段路要走. [背景] 如果你是刚进入WEB前端研发领域,想试试这潭水有多深,看这篇文章吧: 如 ...
- hdu4289 最小割最大流 (拆点最大流)
最小割最大流定理:(参考刘汝佳p369)增广路算法结束时,令已标号结点(a[u]>0的结点)集合为S,其他结点集合为T=V-S,则(S,T)是图的s-t最小割. Problem Descript ...
- 微博MySQL优化之路--dockone微信群分享
微博MySQL优化之路 数据库是所有架构中不可缺少的一环,一旦数据库出现性能问题,那对整个系统都回来带灾难性的后果.并且数据库一旦出现问题,由于数据库天生有状态(分主从)带数据(一般还不小),所以出问 ...
- Web前端研发工程师编程能力飞升之路
今天看到这篇文章.写的非常有意思,于是转载了.看看我们都处于什么的阶段. [背景] 如果你是刚进入web前端研发领域,想试试这潭水有多深,看这篇文章吧:如果你是做了两三年web产品前端研发,迷茫找不着 ...
- BZOJ-1877 晨跑 最小费用最大流+拆点
其实我是不想做这种水题的QWQ,没办法,剧情需要 1877: [SDOI2009]晨跑 Time Limit: 4 Sec Memory Limit: 64 MB Submit: 1704 Solve ...
随机推荐
- VSCODE配置tasks.json
1.新建配置任务tasks.json 选择gcc.exe 可以在其中按需修改 { "version": "2.0.0", "tasks": ...
- FileZilla 连接不上宝塔
1,修改 pureftp的配置文件 ForcePassiveIP 为服务器的ip , 并去掉 # 2,FileZilla 使用明文连接
- PHPCMS V9安装出现DNS解析失败的解决方法-不支持采集和保存远程图片
目前因为phpcms官网停止解析后,很多人安装phpcms v9出现如下错误: 这是因为检测dns解析的域名是phpcms官网的域名,官网域名停止解析后肯定检测失败.解决方法如下: 打开/ ...
- 使用Java分析器优化代码性能,解决OOM问题
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址 背景 最近我一直在做性能优化,对一个单机应用做性能优化.主要是 ...
- [转帖]Linux命令之——rsync
文章目录 1 rsync是干什么用的 2 rsync和scp有什么区别 3 rsync简单用法介绍 rsync四种工作方式 1. 本地文件系统上实现同步 2. 本地主机使用远程shell和远程主机通信 ...
- [转帖]jmeter之使用csv文件传递参数-05篇
csv文件格式,第一列为手机号,第二列为密码 1.右键添加一个配置元件---csv数据文件设置 2.设置csv数据提取路径 3.引用数据 4.设置线程循环运行两次,然后发送请求 看到结果就执行了两次, ...
- [转帖]Innodb存储引擎-idb文件格式解析
文章目录 ibd 文件格式解析 idb文件 page类型和格式(File Header & Trailer) FIL_PAGE_TYPE_FSP_HDR 格式 Extent Descripto ...
- [转帖]VMware vCenter证书过期解决方法
https://www.yii666.com/blog/395521.html vCenter证书过期解决方法 目录 1 概述 2 详细操作步骤 2.1 检查关键的STS证书是否过期并修复 2.2 检 ...
- Redis monitor命令
MONITOR Syntax MONITOR Available since: 1.0.0 Time complexity: ACL categories: @admin, @slow, @dange ...
- 麒麟信安V3.4 安装PG15的过程V2.0
改版说明 上一次进行了PG的安装当时发现自己少加了一部分ossp的处理. 这里补充上...不然挺浪费时间的. 背景 发现基于OpenEuler的几个系统使用CentOS的rpm包 安装PG数据库时有问 ...