[lnsyoj1015/luoguP1197/JSOI2008]星球大战starwar

news/2024/9/28 17:09:40

题意

给出一个 \(n\) 个点,\(m\) 条边的无向图,对其进行 \(k\) 次操作,每次操作会删除一个当前无向图中存在的点及其相邻的边,求原图 和每次操作之后的图的连通块个数

sol

由于需要计算连通块个数,可以自然的想到使用并查集解决。然而,删除某个点后,我们无法通过并查集快速地得知其与其他点是否直接联通,也就无法快速地计算。
考虑按照操作的逆序来计算,那么就相当于在一个 \(n-k\) 个点的无向图中,每次操作添加一个点,并添加一些与其相邻的边,求原图和每次操作之后的图的连通块个数。这样,就可以通过并查集来解决这个问题了。

代码

#include <iostream>
#include <algorithm>
#include <cstring>
#include <unordered_map>
#include <vector>#define x first 
#define y second using namespace std;
typedef pair<int, int> PII;const int N = 400005;int n, m, k;
int g[N];
PII edges[N];
unordered_map<int, int> depth;
vector<PII> edge[N];
int fa[N];
int ans[N];int find(int x){if (fa[x] == x) return x;return fa[x] = find(fa[x]);
}int main(){scanf("%d%d", &n, &m);for (int i = 1; i <= m; i ++ ) {int x, y;scanf("%d%d", &x, &y);edges[i] = {x, y};}scanf("%d", &k);for (int i = 1; i <= k; i ++ ) {scanf("%d", &g[i]);depth[g[i]] = k - i + 1;}for (int i = 1; i <= m; i ++ ) {int dx = depth[edges[i].x], dy = depth[edges[i].y];edge[max(dx, dy)].push_back(edges[i]);}for (int i = 1; i <= n; i ++ ) fa[i] = i;int cnt = n - k;for (int d = 0; d <= k; d ++ , cnt ++ ){// printf("#depth: %d\n", d);for (auto e : edge[d]){// printf("%d %d\n", e.x, e.y);int fx = find(e.x), fy = find(e.y);if (fx == fy) continue;cnt -- ;fa[fx] = fy;}ans[d] = cnt;}for (int i = k; i >= 0; i -- ) printf("%d\n", ans[i]);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/65834.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

BUUCTF(PWN)- rip

BUUCTF(PWN)- rip 打开题目得到靶机信息: node5.buuoj.cn:29045 和附件 pwn1查看文件信息为 64-bit ,用 ida 打开附件 首先 shift+f12 查找字符串,能看见 system、/bin/sh 字样,点击 please input 或者 ok,bye!!! 跳转直接进入 main 函数查看gets 并没有限制输入,gets 函…

Springboot实战——黑马点评之秒杀优化

Springboot实战——黑马点评之 秒杀优化 1 秒杀优化 先来复习以下,秒杀优惠券业务的现有实现逻辑:以上流程图中的操作串行执行,效率极低。 其中 判断秒杀库存 以及 校验一人一单 属于对数据库的读取,耗时较少;扣减库存 以及 创建订单 属于对数据库的写操作,耗时相对较久。…

PARTVI-Oracle数据库管理与开发-数据库管理员的概念

18. 数据库管理员的概念 18.1. 数据库管理员的职责 数据库管理员(DBA)的主要责任是使企业数据对其用户可用。DBA必须与开发人员紧密合作,确保他们的应用程序有效地使用数据库,并与系统管理员合作,确保物理资源充足且使用高效。Oracle DBA负责了解Oracle数据库架构以及数据…

实验作业1

实验一 任务一 源代码#include<stdio.h> int main() {printf(" o \n");printf("<H>\n");printf("I I\n");printf(" o \n");printf("<H>\n");printf("I I\n");return 0; }效果 源代码#incl…

01. 感知层环境安装

1. 软件以及驱动的安装安装ZigBee无线网络节点开发平台 IAR Embedded Workbench(简称EW) 安装串口驱动(CH340芯片)。点击安装64位的。后续就可以使用串口对开发板进行调试。 仿真器驱动程序(用来烧录代码)的安装。 安装串口工具(XCOM)。2. IAR创建工程打开安装的IAR软件,点击…

黑马PM-内容项目-需求分析

需求分析的定义需求分析的时机需求分析的步骤

带笔TP gt9xx调试

一.添加驱动把供应商提供的驱动替换掉sdk里面默认的驱动drivers/input/touchscreen/gt9xx 二.dts配置:&i2c3 {status = "okay";pinctrl-names = "default";pinctrl-0 = <&i2c3m0_xfer>;gt9xx: gt9xx@5d {compatible = "goodix,gt9xx&q…

C10-06-Burp简单使用

一 浏览器代理设置免责声明 本文仅是个人对该工具的学习测试过程记录,不具有恶意引导意向。 本文工具仅面向合法授权的企业安全建设行为,如您需要测试本工具的可用性,请自行搭建靶机环境。 在使用本工具进行检测时,您应确保该行为符合当地的法律法规,并且已经取得了足够的…