洛谷 P1197 [JSOI2008]星球大战(并查集)

Vue3 + 高德地图实现车辆电子围栏监控与报警 通过本文的实现,我们完成了一个通用的车辆电子围栏监控功能:支持多种围栏类型。支持进入/离开/双向报警。使用缓存机制避免重复告警。可与Vue3 + 高德地图无缝集成。在实际项目中,可以结合WebSocket 实时定位,实现车辆的实时监控 + 围栏告警系统🚀。 阅读详情

题目描述

题目链接:洛谷 P1197 [JSOI2008]星球大战
很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治着整个星系。

某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球。这些星球通过特殊的以太隧道互相直接或间接地连接。

但好景不长,很快帝国又重新造出了他的超级武器。凭借这超级武器的力量,帝国开始有计划地摧毁反抗军占领的星球。由于星球的不断被摧毁,两个星球之间的通讯通道也开始不可靠起来。

现在,反抗军首领交给你一个任务:给出原来两个星球之间的以太隧道连通情况以及帝国打击的星球顺序,以尽量快的速度求出每一次打击之后反抗军占据的星球的连通块的个数。(如果两个星球可以通过现存的以太通道直接或间接地连通,则这两个星球在同一个连通块中)。
输入格式
输入文件第一行包含两个整数, n , m n,m n,m,分别表示星球的数目和以太隧道的数目。星球用 0 ∼ n − 1 0∼n−1 0∼n−1的整数编号。

接下来的 m m m 行,每行包括两个整数 x , y x,y x,y,表示星球 x x x 和星球 y y y 之间有 “以太” 隧道,可以直接通讯。

接下来的一行为一个整数 k k k ,表示将遭受攻击的星球的数目。

接下来的 k k k行,每行有一个整数,按照顺序列出了帝国军的攻击目标。这 k k k 个数互不相同,且都在 0 0 0 到 n − 1 n−1 n−1 的范围内。

输出格式
第一行是开始时星球的连通块个数。接下来的 k k k 行,每行一个整数,表示经过该次打击后现存星球的连通块个数。
输入输出样例

输入
8 13
0 1
1 6
6 5
5 0
0 6
1 2
2 3
3 4
4 5
7 1
7 2
7 6
3 6
5
1
6
3
5
7

输出
1
1
1
2
3
3

说明/提示
【数据范围】
对于 100 100% 100 的数据, 1 ≤ m ≤ 2 × 1 0 5 , 1 ≤ n ≤ 2 m , x ≠ y 1≤m≤2×10^5,1≤n≤2m,x≠y 1≤m≤2×105,1≤n≤2m,x​=y
[JSOI2008]

并查集解法

整体思路是将“摧毁”的过程逆过来看成一个“重建”的过程。然后用并查集维护各点之间的连通性即可。将样例中的摧毁过程画出来就不难理解“逆向重建”的做法了。图中处于“摧毁”状态的结点用深色标出,具体步骤如下(请结合样例图进行理解):
1.将星球之间的连接情况存成一张图,将摧毁星球的编号依次存入数组。用数组d[]记录点的摧毁情况,d[i]为1\0表示点i被摧毁\没被摧毁,初始时所有要被摧毁的点都标为被摧毁状态,见最后一张图。记第i次摧毁后的连通块个数为a[i]。
2.结合样例和答案可以发现,那些被摧毁了的点并不参与连通块的统计,这一点很重要!
3.在“重建”之前要确定一下此时的连通性(对应最终的连通块个数):首先把当前连通块个数初始化为没有被摧毁的结点对应的连通块个数——遍历一下图,将那些在初始图上有连接且没处于摧毁状态的结点合并。这些结点没有被摧毁的结点对应的连通块个数即为最终的连通块个数。
4.按摧毁的逆序进行合并,如此处样例中要按7、5、3、6、1的顺序合并。每次合并,将与该结点相连且没有处于摧毁状态的结点合并,同时记录用a[]逆序存储当前连通块个数、并把这个处于摧毁状态的结点设为没有被摧毁的状态。重复此过程到最后即可。
5.输出答案数组a[]。
在这里插入图片描述

C++代码

#include<iostream>
#include<cstring>
#include<cstdio>
   using namespace std;
   const int M=4e5+1000;
   struct edge{   
   int u;
   int v;
   int next;
   }e[M];

   int head[M],cnt=0;

   void Insert(int u,int v){
   cnt++;
   e[cnt].u=u;
   e[cnt].v=v;
   e[cnt].next=head[u];
   head[u]=cnt;
   }

   int f[M];
   int get_f(int x){
   return f[x]==x ? x : f[x]=get_f(f[x]);
   }

   int a[M],d[M],res;
   void Merge(int x,int y){
   int fx=get_f(x);
   int fy=get_f(y);
   if(fx!=fy){
    f[fy]=fx;
    res--;
   }
   }
   int main(){
       memset(head,-1,sizeof(head));
   int n,m;
   scanf("%d%d",&n,&m);
   for(int i=0;i<=n;i++)f[i]=i;
   for(int i=1;i<=m;i++){
    int x,y;
    scanf("%d%d",&x,&y);
    Insert(x,y);
    Insert(y,x);
   }
   int k,ans[M];
   res=n;
   scanf("%d",&k);
   for(int i=1;i<=k;i++){
    scanf("%d",&a[i]);
    if(!d[a[i]]) res--;
    d[a[i]]=1;
   }
   for(int i=0;i<n;i++){
    int u=i;
    if(!d[u]){
        for(int j=head[u];j>=0;j=e[j].next){
            int v=e[j].v;
            if(!d[v]){
                Merge(u,v);
            }
        }
    }
   }
   for(int i=k;i>=1;i--){
      ans[i]=res;
      d[a[i]]=0;
      res++;
      int u=a[i];
    for(int j=head[u];j>=0;j=e[j].next){
        int v=e[j].v;
        if(!d[v]){
            Merge(u,v);
          }
      }
   }
   ans[0]=res;
   for(int i=0;i<=k;i++)
   printf("%d\n",ans[i]);
   return 0;
   }





一文让你轻松理解Wi-Fi理论速率计算方式 如上所示,在使用FDM的802.11协议上,最小子载波带宽为312.5KHz,那一个信道频宽为20MHz的信道可以分成64个子载波,但是由于技术原因,有效使用的是52个子载波,实际用于数据传输的只有48个,有4个子载波充当导频载波。载波:交流信号或者直流信号本身不具备数据传输能力,但是如果信号发生很小的波动或者变化,从而实现数据的收发。所谓子载波,就是将信号划为为很多的小信道,这些小信道可以实现数据的并发传输,子载波我们英文称为subcarrier,也称为音调(tone)。Symbol time如下所示。 阅读详情

相关推荐

SAP OBYC自动过账全解析:从BSX到WRX的会计科目配置指南

本文深入解析SAP OBYC自动过账功能,从BSX到WRX的会计科目配置全流程,涵盖评估分组代码、事务码和评估类等核心概念。通过实战案例展示如何实现库存变动到财务过账的自动化流转,提升企业财务数据的准确性和效率。

weixin_29239279的博客 419

[JSOI2008]星球大战(正难则反)

题目描述 题目传送门 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治着整个星系。 某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球。这些星球通过特殊的以太隧道互相直接或间接地连接。 但好景不长,很快帝国又重新造出了他的超级武器。凭借这超级武器的力量,帝国开始有计划地摧毁反抗军占领的星球。由于星球的不断被摧毁,两个星球之间的通讯通道也开始不可...

Z 299

UE5新手必看:如何用蓝图系统快速打造赛车游戏(含Chaos Physics配置)

本文为UE5新手提供使用蓝图系统快速打造赛车游戏的完整指南,涵盖Chaos Physics配置、载具蓝图架构设计、控制逻辑实现等关键步骤。通过详细的实战案例和优化技巧,帮助开发者高效构建具备专业物理反馈的赛车游戏原型。

weixin_29001327的博客 387

【题解】洛谷P1197 [JSOI2008]星球大战

题目 洛谷P1197[JSOI2008]星球大战 题解 判断两个星球的连通性以及计算连通块的个数,可以使用并查集。但是,并查集不容易实现删除操作,所以要从问题的反面考虑,即从最终的局面开始,逐个添加被消灭的星球。实时计算连通块的数量,若两个连通块合并,则数量减一。 一些与题目本身无关的提醒:定义vector<int> v后,如果容器是空的,不能用v[]=直接赋值,如果容器内有超过i个元素(即v[i]存在),才可以直接访问v[i]。 变量名不要用kill(与库函数

zjgmartin的博客 448

NVIDIA B300 vs B200:详细解析与性能对决

详细解析 NVIDIA B300 整机)的性能,并与前代的 B200 进行对比。它不仅在核心计算能力(FP8)上实现了飞跃,更重要的是通过革命性的第二代 Transformer Engine 和第五代 NVLink 技术,彻底重塑了大规模 AI 模型训练和推理的效率与规模上限。其显存容量和带宽的巨大提升也为处理超大型模型和数据提供了坚实基础。与 B200 相比,B300 是一次全面的、代际性的性能跃升,特别适合那些需要处理最前沿、最复杂 AI 和科学计算任务的用户和组织。

2401_89353317的博客 3052

手把手教你用RSoft BPM仿真一个1x2光分束器:从参数设置到结果分析全记录

本文详细介绍了使用RSoft BPM模块设计和仿真1×2光分束器的完整流程,包括参数设置、结构建模、仿真配置和结果分析。通过实战指南,帮助读者掌握光波导器件的仿真技术,实现50:50功率分配的设计目标,适用于光通信和集成光学领域的研究与应用。

weixin_30545945的博客 545

[JSOI2008]星球大战

https://www.luogu.org/problemnew/show/P1197 题解:倒向并查集 C++版本一 #include&lt;iostream&gt; #include&lt;cstdio&gt; #define f(i,a,b) for(register int i=a;i&lt;=b;i++) #define fd(i,a,b) for(register int i=...

无限迭代中...... 558

YOLOv8车辆碰撞识别检测系统(项目源码+YOLO数据集+模型权重+UI界面+python+深度学习+环境配置+目标检测)

随着我国汽车保有量的持续攀升,道路交通事故数量居高不下,车辆碰撞损伤的快速、精准评估已成为交通安全管理、保险理赔定损以及汽车后市场服务中的关键环节。传统的人工目视查验方法高度依赖评估人员的专业经验,不仅主观性强、效率低下,而且在复杂光照、多角度遮挡等真实场景下难以保证评估的一致性和可复现性。计算机视觉与深度学习技术的迅猛发展,为目标检测任务提供了强有力的技术支撑,使得基于视觉的车辆损伤自动化识别成为可能。

斌擎科技 129

[JSOI2008] 星球大战

现在,反抗军首领交给你一个任务:给出原来两个星球之间的以太隧道连通情况以及帝国打击的星球顺序,以尽量快的速度求出每一次打击之后反抗军占据的星球的连通块的个数。某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球。然后正常的思路就是先扫一遍,加到一个并查集里,然后轰一个星球,删一个星球(从并查集里去掉),那么问题来了,并查集怎么删?接下来的 m 行,每行包括两个整数 x,y,表示星球 x 和星球 y 之间有 “以太” 隧道,可以直接通讯。第一行是开始时星球的连通块个数。

NDCSID的博客 480

Qt界面美化-飞扬青云自绘控件插件的使用-避免采坑

1、先上一个集成到QtCreater中的效果图: 2、飞扬青云自绘控件插件下载地址:https://gitcode.net/mirrors/feiyangqingyun/qucsdk?utm_source=csdn_github_accelerator 3、集成插件到QtCreater中的方法: (1)、查看自己使用的QtCreater的版本信息,我的:Qt 5.15.2 MSVC2019 64位 (2)插件下载下来后工程预览: 我选择msvc版本的SDK,打开找到匹配的SDK:...

小米的修行之路 2792

C#上位机+YOLOv8实战:摄像头/视频流实时目标检测(工业级优化+完整可运行源码)

纯C#实现,无Python依赖,适配工业工控机部署;工业级优化:解决帧率、内存、鲁棒性三大核心问题;代码完整可复用,支持摄像头/视频流/RTSP多源检测;避坑指南覆盖开发中90%的常见问题,降低落地成本。相较于传统方案,该方案兼顾实时性与易用性,成本仅为商用视觉库的1/10,可快速落地到工业质检、安防、物流等场景。后续可拓展方向包括:自定义数据集训练、GPU加速推理、工业通信(PLC/串口)对接等。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 733

[JSOI2008]星球大战starwar(逆向思维+并查集)

题意:传送门 题解:使用逆向思维,可以从后面往前构建,然后统计联通个数,这个题我打了半天没过去,数组开小了,以后注意存边尽量存双倍,因为你不知道什么时候会用双向边,还有并查集统计最后不用一个一个遍历,直接合并一个减去一个就可以。 附上代码: #include&lt;bits/stdc++.h&gt; using namespace std; const int maxm=2e5+5...

肘子的博客 437

Xilinx_JESD204B

Xilinx_JESD204B_AXI配置 说明:通过FPGA的高速数据接口JESD204B对AD9625进行高速采集。 环境:Vivado2018.3。 IP核:JESD204(7.2)。 参考手册:pg066_jesd204 v7.2。 资料以及IP_licence:JESD204B AXI协议资料:AXI 文章目录JESD204B概述JESD204B接口术语JESD204B 层JESD204B_AXI介绍AXI介绍JESD204B__AXI_Lite接口AXI-Lite接口介绍AXI-Lite接口信号

Crazzy_M的博客 1万+

(并查集)洛谷P1197 [JSOI2008]星球大战

P1197 [JSOI2008]星球大战 思路: 摧毁是这个题目的一个难点,如果是摧毁一个点就重新构图的话肯定会T。那么我们可以反着想,就是从最后的状态往前推,用并查集判断是否是连通块。 代码: #include<bits/stdc++.h> #define pii pair<int,int> #define ll long long const int N=1e6+10;...

Z7784562的博客 320

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

洛谷 P1197 [JSOI2008]星球大战 离线+并查集

洛谷 P1197 [JSOI2008]星球大战 离散化+并查集 题解: 这道题我们需要离线存储信息,然后逆着往上不断地修复每个星球。 代码如下: #include<iostream> #include<algorithm> #include<stdio.h> #include<cmath> #include<queue> #include...

化身孤岛的鲸o的博客 461

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

寒假刷题34:洛谷P1197 [JSOI2008]星球大战(并查集)

题目链接: 洛谷P1197 [JSOI2008]星球大战 题目解析: 离线以后逆序操作 AC代码: #include<iostream> #include<cstring> #include<vector> #include<queue> #include<algorithm> using namespace std; con...

int_lyy的博客 216

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

洛谷 P1197 [JSOI2008]星球大战 链式前向星 逆向并查集 连通块

题目链接: https://www.luogu.com.cn/problem/P1197 参考博客: https://www.luogu.com.cn/blog/Shine-Sky/solution-p1197 这个博客超级清晰,建议复习时再反复学习 算法: 1:逆向并查集 2:链式前向星 思路: 1:如果我们去正着摧毁 ,想想都有点困难,要不 我们使用逆向思维哈哈哈 2:没...

aiwo1376301646的博客 419

洛谷 p1197 [JSOI2008]星球大战(并查集)

洛谷 P1197 [JSOI2008]星球大战题目描述很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系。某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球。这些星球通过特殊的以太隧道互相直接或间接地连接。但好景不长,很快帝国又重新造出了他的超级武器。凭借这超级武器的力量,帝国开始有计划地摧毁反抗军占领的星球。由于星球的不断被摧毁,两个星球

Loi_feather的博客 559

#洛谷 P1197 [JSOI2008]星球大战 (离线 + 并查集)

题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治着整个星系。 某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球。这些星球通过特殊的以太隧道互相直接或间接地连接。 但好景不长,很快帝国又重新造出了他的超级武器。凭借这超级武器的力量,帝国开始有计划地摧毁反抗军占领的星球。由于星球的不断被摧毁,两个星球之间的通讯通道也开始不可靠起来。...

OlaMins 400

并查集-洛谷P1197 [JSOI2008]星球大战

星球大战 并查集的一道题。 题意:有n个点,m条边,现有k个操作,每次操作删去图中的一个点以及其连接的边,问最开始和每次操作后图中的连通分量的个数。(删点的顺序即为输入顺序) 思路:逆向思考,把顺序删点变为逆序加点,判断每次加点后是否有某个原本不连通的连通分量连接在一起。先把所有要删除的点标记一下,然后判断遇到这些点时,先不进行 jion() 操作,之后从第k次操作开始加点,把该点的标记取消,加点...

Tom~~~ 269

洛谷 P1197 [JSOI2008]星球大战(并查集)

https://www.luogu.com.cn/problem/P1197 思路 先建好再拆不现实,想想就会超时,反着来,先拆了再慢慢复原 代码 #include <bits/stdc++.h> using namespace std; const int N = 400005; int n, m, k, tot, cnt; int fa[N], chai[N], ans[N], head[N]; bool flag[N]; struct edge { int u, v, next; .

We have to be very hard to reach the top. 206

洛谷P1197 [JSOI2008]星球大战 并查集+逆向思维

题目链接:https://www.luogu.com.cn/problem/P1197 这题最暴力的想法是每次拆一个点之后重建图,来拆之前比较连通块的数量。但这样做时间肯定不允许。 正确做法是逆向思维,我们先把所有要拆的点全部拆掉,记录此时的连通块数量。然后,从后往前,把拆的点重建,重建时连通块要+1(因为新加入了一个连通块),之后从新建的点连边,有合并的连通块,连通块数量-1,记入答案数组。最后...

hhhcbw的博客,欢迎各位来访 222

并查集判断连通块 [JSOI2008]星球大战(洛谷 P1197)

[JSOI2008]星球大战 题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治着整个星系。 某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球。这些星球通过特殊的以太隧道互相直接或间接地连接。 但好景不长,很快帝国又重新造出了他的超级武器。凭借这超级武器的力量,帝国开始有计划地摧毁反抗军占领的星球。由于星球的不断被摧毁,两个星球之间的通...

不知所云的博客 290

洛谷 P1197 [JSOI2008]星球大战 并查集+离线

https://www.luogu.org/problem/P1197 题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治着整个星系。 某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球。这些星球通过特殊的以太隧道互相直接或间接地连接。 但好景不长,很快帝国又重新造出了他的超级武器。凭借这超级武器的力量,帝国开始有计划地摧毁反抗军占领的星...

xiji333的博客 420

【并查集】P1197 [JSOI2008]星球大战-洛谷

题目链接 https://www.luogu.com.cn/problem/P1197 解题思路 1.这题最容易想到的方法就是用并查集搜索;在每次摧毁一个节点之后,把与该节点相连的边全部擦去,重新扫描图; 但是这个方法太费时,肯定不行; 2.`逆向思维` 我们不妨在一开始建图的时候就不考虑会被摧毁的点,直接建最后的图; 然后把每一次的摧毁操作当成修复操作;再利用并查集判断联通即可; 代码展示 #include<bits/stdc++.h> using namespace std

高高冷的博客 241

洛谷 P1197 [JSOI2008]星球大战

洛谷 P1197 [JSOI2008]星球大战 Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治着整个星系。 某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球。这些星球通过特殊的以太隧道互相直接或间接地连接。 但好景不长,很快帝国又重新造出了他的超级武器。凭借这超级武器的力量,帝国开始有计划地摧毁反抗军占领的星球。由于...

weixin_30664615的博客 72
上一篇: 洛谷 P1896 [SCOI2005]互不侵犯(状压dp)
下一篇: 【洛谷】P1137 旅行计划(拓扑排序)
准图灵奖得主
博客等级 码龄8年 355粉丝 135原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值