题目https://www.luogu.org/problemnew/show/P1197

题意:有n个结点m条无向边,k次操作每次摧毁一个结点并询问此时有多少连通块。

思路:平时在线的搞多了都没想到这道题完全可以存下结果之后输出。

对于那些要被摧毁的城市,我们只需要先都摧毁,然后倒序的进行恢复。就可以求出每一次操作的结果了。

因为对于摧毁我们不好用并查集,但是对于重建就比较好用并查集了。

所以分成两步,把所有没有被摧毁的连通的结点都合并起来。

然后按照倒序加入被摧毁的结点,将他和他所邻接的结点进行合并。

 #include<cstdio>
#include<cstdlib>
#include<map>
#include<set>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
#include<stack>
#include<queue>
#include<iostream> #define inf 0x7fffffff
using namespace std;
typedef long long LL;
typedef pair<string, string> pr; int n, m, k;
const int maxn = 4e5 + ;
int par[maxn];
int head[maxn];
struct edge{
int u, v, nxt;
}e[maxn];
int tot = ;
bool destroy[maxn]; void addedge(int u, int v)
{
e[tot].u = u;
e[tot].v = v;
e[tot].nxt = head[u];
head[u] = tot++;
e[tot].u = v;
e[tot].v = u;
e[tot].nxt = head[v];
head[v] = tot++;
} int ffind(int x)
{
if(par[x] == x)return x;
else return par[x] = ffind(par[x]);
} void init()
{
for(int i = ; i < n; i++){
par[i] = i;
head[i] = -;
destroy[i] = false;
}
} stack<int>sss;
stack<int>ans;
int main()
{
scanf("%d%d", &n, &m);
init();
for(int i = ; i < m; i++){
int u, v;
scanf("%d%d", &u, &v);
addedge(u, v);
}
scanf("%d", &k);
for(int i = ; i < k; i++){
int d;
scanf("%d", &d);
destroy[d] = true;
sss.push(d);
} int cnt = n - k;
for(int i = ; i < tot; i++){
if(!destroy[e[i].u] && !destroy[e[i].v]){
int fu = ffind(e[i].u), fv = ffind(e[i].v);
if(fu != fv){
cnt--;
par[fu] = fv;
}
}
}
ans.push(cnt);
while(!sss.empty()){
int x = sss.top();sss.pop();
cnt++;
destroy[x] = false;
for(int i = head[x]; i != -; i = e[i].nxt){
if(!destroy[e[i].u] && !destroy[e[i].v]){
int fu = ffind(e[i].u), fv = ffind(e[i].v);
if(fu != fv){
cnt--;
par[fu] = fv;
}
}
}
ans.push(cnt);
} while(!ans.empty()){
printf("%d\n", ans.top());
ans.pop();
} return ;
}

洛谷P1197 星球大战【并查集】的更多相关文章

  1. 洛谷P3295 萌萌哒 并查集 + ST表

    又切一道紫题!!! 成功的(看了一吨题解之后),我A掉了第二道紫题. 好,我们仔细观察,发现这是一个排列组合问题. 有些限定条件,要相等的地方,我们就用并查集并起来.最后一查有多少个并查集,就有多少个 ...

  2. 洛谷P4092树——并查集

    题目:https://www.luogu.org/problemnew/show/P4092 利用并查集,倒序离线,那么从倒序来看被撤销标记的点就再也不会被标记,所以用并查集跳过: 莫名其妙的WA,调 ...

  3. 洛谷P2391 白雪皑皑(并查集)

    题目背景 “柴门闻犬吠,风雪夜归人”,冬天,不期而至.千里冰封,万里雪飘.空中刮起了鸭毛大雪.雪花纷纷,降落人间. 美能量星球(pty 在 spore 上的一个殖民地)上的人们被这美景所震撼.但是 p ...

  4. 洛谷P3958 奶酪 并查集

    两个空洞可互达当且仅当两个空洞相切,即球心距离小于等于球的直径. 一一枚举两个可互达的空洞,并用并查集连起来即可. Code: #include<cstdio> #include<c ...

  5. 洛谷 P1197 星球大战 题解

    题面 并查集处理问题的基本思路:如果不是强制在线那么可以倒着处理,把删边改为可爱的加边,然后使用并查集来判断是否联通: 所以可以较为轻松的写出AC代码: #include <bits/stdc+ ...

  6. 洛谷 P3958 奶酪 并查集

    目录 题面 题目链接 题面 题目描述 输入输出格式 输入格式 输出格式: 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P3958 奶酪 题面 题目描述 现有一块大奶酪 ...

  7. 洛谷 P2391.白雪皑皑 (并查集,思维)

    题意:有\(n\)个点,对这些点进行\(m\)次染色,第\(i\)次染色会把区间\((i*p+q)\ mod\ N+1\)和\((i*q+p)\ mod\ N+1\)之间的点染成颜色\(i\),问最后 ...

  8. 洛谷P2024食物链——并查集补集的灵活运用

    题目:https://www.luogu.org/problemnew/show/P2024 自己在做本题时最大的障碍就是:不会在一个集合的father改变时把相应的补集也跟着改变. 借鉴题解后,才明 ...

  9. Bzoj1015/洛谷P1197 [JSOI2008]星球大战(并查集)

    题面 Bzoj 洛谷 题解 考虑离线做法,逆序处理,一个一个星球的加入.用并查集维护一下连通性就好了. 具体来说,先将被消灭的星球储存下来,先将没有被消灭的星球用并查集并在一起,这样做可以路径压缩,然 ...

随机推荐

  1. java中this的使用

    java中的this随处可见,用法也多,现在整理有几点:this1.当全局变量跟局部变量重名时,表示使用全局变量(此时this指代本类对象)例有一类class A{    String name;   ...

  2. 多线程-Task、await/async

    Task创建无返回值 Task是.netframwork4.0重新分装的多线程类.原因以前的多线程(thread threadpool)不好用.(.net framwork也是的发展的,现在的EF,刚 ...

  3. django认证01---token

    1.登录鉴权跟 Token 的鉴权区别 以 Django 的账号密码登录为例来说明传统的验证鉴权方式是怎么工作的,当我们登录页面输入账号密码提交表单后,会发送请求给服务器,服务器对发送过来的账号密码进 ...

  4. dubbo探究

    一 占位 待整理.. 二 问题汇总 1 谈谈dubbo的超时重试 dubbo 启动时默认有重试机制和超时机制.如果在一定的时间内,provider没有返回,则认为本次调用失败.重试机制出现在调用失败时 ...

  5. Word 插入目录的 5 种方法

    1. "运用多级编号法"之图文教程 效果图: 步骤: 首先,为了更好的演示,我们先将我们的一级标题全部选中,按住Ctrl键,去一一选择就行了. 选中一级标题后,我们进入「开始」-「 ...

  6. (十七)Hibnernate 和 Spring 整合

    一.Hibnernate 和 Spring结合方案: 方案一:  框架各自使用自己的配置文件,Spring中加载Hibernate的配置文件. 方案二:   统一由Spring的配置来管理.(推荐使用 ...

  7. static的用法详解

    一.静态类 [1] 仅包含静态成员. [2] 静态类的本质,是一个抽象的密封类,所以不能被继承,也不能被实例化.也就是说,不能使用 new 关键字创建静态类类型的变量. [4] 不能包含实例构造函数. ...

  8. 4、java基础:JDK8接口新特性以及接口和抽象类区别

    在jdk8之前,interface之中可以定义变量和方法,变量必须是public.static.final的,方法必须是public.abstract的.由于这些修饰符都是默认的,所以在JDK8之前, ...

  9. centos禁止root用户ssh远程登录

    首先,我们要以root身份登录远程主机 vim指令编辑ssh配置文件,如 vim /etc/ssh/sshd_config 查找PermitRootLogin,把yes改为no 修改完配置需要重启ss ...

  10. SQL alchemy

    SQL alchemy介绍 SQL alchemy是orm思想的一个具体实现的产品 orm:对象关系映射思想 Object Relational Mapping 就是将数据库里的资源与面向对象中的类和 ...