题目链接

题目

题目描述

有 \(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. 阿里巴巴MYSQL 开发规范

    转载请注明出处: (一) 建表规约 1. [强制]表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint(1 表示是,0 表示否). 说明:任何字段如果 ...

  2. idea导入maven项目结构不全

    本文为博主原创,转载请注明出处 将本地的项目导入idea中,其操作第一步为: File->open->选中导入maven项目的pom文件,正常情况通过该步骤项目就会导入到idea中. 通过 ...

  3. DBA实战面试题(一)

    数据库面试测试题(一) 简述当前主流RDBMS软件有哪些?开源且跨平台的数据库软件有哪些? 参考答案 当前主流的数据库服务器软件有: Oracle . DB2 . SQL SERVER .MySQL ...

  4. 媒体查询常用 - 移动端和PC端尺寸

    /* 移动端 */ @media all and (max-width: 768px) { } /* PC端 */ @media all and (min-width: 769px) { }

  5. MongoDB 部署副本集 + 代码中开启事务

    首先,指定副本名称: vim /etc/mongod.conf replication: replSetName: shard1 在replication里面加入副本名称,多个相同副本,应该使用同样的 ...

  6. [转帖][MySQL 8.2.0] 从参数变化解读 MySQL 8.2.0 发版说明

    https://www.mryunwei.com/482476.html 日前,MySQL 8.2.0 创新版本已正式上线,并提供安装包下载,但 docker 镜像尚未更新. 在 MySQL 8.1. ...

  7. [转帖]jmeter SSL证书相关配置

    在实际工作中,我们大多数接口都是用的HTTPS来保证安全,使用jmeter测试HTTPS请求是如何配置证书呢? 1.最简单的方法,在选项里选择SSL管理器,然后选择相应的证书即可 在弹出的选择框选择证 ...

  8. [转帖]BF16 与 FP16 在模型上哪个精度更高呢

    https://zhuanlan.zhihu.com/p/449345588 BF16 是对FP32单精度浮点数截断数据,即用8bit 表示指数,7bit 表示小数. FP16半精度浮点数,用5bit ...

  9. [转帖]技术派-epoll和IOCP之比较

    直入正题 Epoll 用于Linux系统: IOCP 是用于 Windows: Epoll 是当事件资源满足时发出可处理通知消息: IOCP 则是当事件完成时发出完成通知消息. 从应用程序的角度来看, ...

  10. 【分享笔记】druid存储系统-思维导图

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu 公众号:一本正经的瞎扯 源于:<Druid实时大数据分析原理与实践>这本书的阅读笔记 ...