2021.08.03 P1197 星球大战(并查集)

[P1197 JSOI2008]星球大战 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

重点:

1.可以离线处理。把在线变为离线。

题意:

有n个点,m条边,有k次操作,每次删去一个点,求每次操作后,还有几个连通块(在同一个并查集中视为是一个连通块)。

分析:

先求出k次操作之后有几个连通块,每次加边,如果不在同一个连通块中,就--ans。

代码如下:

#include<bits/stdc++.h>
using namespace std;
#define aa 400010
int n,m,x,y,k,cnt,tot,head[aa],broke[aa],vis[aa],f[aa],ans[aa];
struct node{
int from,to,next;
}a[aa<<1];
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
void add(int start,int end){
++cnt;
a[cnt].from =start;
a[cnt].to =end;
a[cnt].next =head[start];
head[start]=cnt;
}
int find(int x){
if(f[x]==x)return x;
else return f[x]=find(f[x]);
}
void merge(int x,int y){
int xi=find(x),yi=find(y);
if(xi!=yi)f[xi]=yi;
}
int main(){
n=read();m=read();
for(int i=1;i<=m;i++){
x=read();y=read();
add(x,y);add(y,x);
}
k=read();
for(int i=1;i<=k;i++){
broke[i]=read();
vis[broke[i]]=1;
}
for(int i=0;i<=n;i++)f[i]=i;
tot=n-k;
for(int i=1;i<=cnt;i++){
if(!vis[a[i].from ]&&!vis[a[i].to ]&&find(a[i].from )!=find(a[i].to )){
--tot;
merge(a[i].from ,a[i].to );
}
}
ans[k+1]=tot;
for(int i=k;i>=1;i--){
++tot;
vis[broke[i]]=0;
for(int j=head[broke[i]];j!=0;j=a[j].next ){
if(!vis[a[j].from ]&&!vis[a[j].to ]&&find(a[j].from )!=find(a[j].to )){
--tot;
merge(a[j].from ,a[j].to );
//cout<<a[i].from <<" "<<a[i].to <<" "<<endl;
}
}
//cout<<i<<" "<<tot<<endl;
ans[i]=tot;
}
for(int i=1;i<=k+1;i++)cout<<ans[i]<<endl;
return 0;
}

2021.08.03 P1197 星球大战(并查集)的更多相关文章

  1. 2021.08.03 BZOJ 疯狂的馒头(并查集)

    2021.08.03 BZOJ 疯狂的馒头(并查集) 疯狂的馒头 - 题目 - 黑暗爆炸OJ (darkbzoj.tk) 重点: 1.并查集的神奇运用 2.离线化 题意: 给一个长为n的序列,进行m次 ...

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

    题目传送门 星球大战 题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系. 某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这 ...

  3. P1197 [JSOI2008]星球大战 并查集 反向

    题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治着整个星系. 某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过特殊的以太隧 ...

  4. P1197 [JSOI2008]星球大战[并查集+图论]

    题目来源:洛谷 题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治着整个星系. 某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球 ...

  5. BZOJ-1015 StarWar星球大战 并查集+离线处理

    1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MB Submit: 4105 Solved: 1826 [Submit ...

  6. 【BZOJ1015】【JSOI2008】星球大战 并查集

    题目大意 给你一张\(n\)个点\(m\)条边的无向图,有\(q\)次操作,每次删掉一个点以及和这个点相邻的边,求最开始和每次删完点后的连通块个数. \(q\leq n\leq 400000,m\le ...

  7. BZOJ 1015 星球大战(并查集)

    正着不好搞,考虑倒着搞.倒着搞就是一个并查集. # include <cstdio> # include <cstring> # include <cstdlib> ...

  8. JSOI2008 星球大战 [并查集]

    题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系. 某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过特殊的以太隧 ...

  9. [bzoj1015][JSOI2008]星球大战——并查集+离线处理

    题解 给定一张图,支持删点和询问连通块个数 按操作顺序处理的话要在删除点的同时维护图的形态(即图具体的连边情况),这是几乎不可做的 我们发现,这道题可以先读入操作,把没删的点的边先连上,然后再倒序处理 ...

随机推荐

  1. 西门子STEP7安装过程不断提示电脑重启的解决方法

    win+R打开注册表 进入 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager 删除PendingFileR ...

  2. async-validator 源码学习笔记(五):Schema

    系列文章: 1.async-validator 源码学习(一):文档翻译 2.async-validator 源码学习笔记(二):目录结构 3.async-validator 源码学习笔记(三):ru ...

  3. CF1556F Sports Betting (状压枚举子集DP)

    F 对于一张比赛图,经过缩点,会得到dag,且它一定是transitive的,因此我们能直接把比赛图缩成一个有向链.链头作为一个强连通分量,里面的所有点都是胜利的 定义F(win)表示win集合作为赢 ...

  4. pytest配置文件pytest.ini

    说明: pytest.ini是pytest的全局配置文件,一般放在项目的根目录下 是一个固定的文件-pytest.ini 可以改变pytest的运行方式,设置配置信息,读取后按照配置的内容去运行 py ...

  5. Mybatis是如何将sql执行结果封装为目标对象并返回的? 都有哪些映射形式?

    第一种是使用<resultMap>标签,逐一定义数据库列名和对象属性名之间的映 射关系. 第二种是使用 sql 列的别名功能,将列的别名书写为对象属性名. 有了列名与属性名的映射关系后,M ...

  6. spring-boot-learning 缓存之redis

    什么是BSD协议: BSD是"Berkeley Software Distribution"的缩写,意思是"伯克利软件发行版". BSD开源协议是一个给于使用者 ...

  7. spring-boot-learning-Web开发知识

    1).创建SpringBoot应用,选中我们需要的模块: 2).SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来 3).自己编写业务代码: 文件名的功能 x ...

  8. JdbcTemplate ?

    JdbcTemplate 类提供了很多便利的方法解决诸如把数据库数据转变成基本数据 类型或对象,执行写好的或可调用的数据库操作语句,提供自定义的数据错误处 理.

  9. ElasticSearch-学习笔记01-docker安装

    安装ElasticSearch docker 安装请参考: https://www.cnblogs.com/youxiu326/p/docker-01.html docker run -d --nam ...

  10. Spark学习摘记 —— RDD转化操作API归纳

    本文参考 在阅读了<Spark快速大数据分析>动物书后,大概了解到了spark常用的api,不过书中并没有给予所有api具体的示例,而且现在spark的最新版本已经上升到了2.4.5,动物 ...