[Luogu 1197] JSOI2008 星球大战


我算是真的沦为联赛选手了。

并查集裸题。

比较麻烦的是删点。

但是从后往前加点就好操作很多。

所以考虑离线,先存图,然后没被删的点之间,有边就合并。

每加一个点进来,把连着这个点且当前没被删的点并进来,更新连通块个数并存入答案。

最终按顺序输出答案即可。

#include <cstdio>
#include <cstring>
const int MAXN=400010,MAXM=200010;
bool gone[MAXN];
int n,m,k,sum,q[MAXN],ans[MAXN];
struct Edge
{int to;Edge *next;Edge(int to,Edge* next):to(to),next(next){}~Edge(void){if(next!=nullptr)delete next;}
}*head[MAXN];
class UFS
{private:bool exist[MAXN];int f[MAXN];int Find(int x){return x==f[x] ? x : f[x]=Find(f[x]);}public:UFS(int n){memset(exist,0,sizeof exist);for(int i=0;i<n;++i){head[i]=nullptr;f[i]=i;}}~UFS(void){for(int i=0;i<n;++i)delete head[i];}void Merge(int x,int y){f[Find(y)]=Find(x);}int Count(void){int ans=0;for(int i=0,t;i<n;++i)if(!gone[i] && !exist[t=Find(i)]){++ans;exist[t]=1;}return ans;}bool Connected(int x,int y){return Find(x)==Find(y);}
};
void AddEdges(int u,int v)
{head[u]=new Edge(v,head[u]);head[v]=new Edge(u,head[v]);
}
int main(int argc,char** argv)
{scanf("%d %d",&n,&m);static UFS *S=new UFS(n);for(int i=1,x,y;i<=m;++i){scanf("%d %d",&x,&y);AddEdges(x,y);}scanf("%d",&k);for(int i=1;i<=k;++i){scanf("%d",&q[i]);gone[q[i]]=true;}for(int u=0;u<n;++u)if(!gone[u])for(Edge *i=head[u];i!=nullptr;i=i->next){int v=i->to;if(!gone[v])S->Merge(u,v);}ans[k]=sum=S->Count();for(int j=k,u;j>=1;--j){++sum;gone[u=q[j]]=false;for(Edge *i=head[u];i!=nullptr;i=i->next){int v=i->to;if(gone[v]==false && !S->Connected(u,v)){--sum;S->Merge(u,v);}}ans[j-1]=sum;}for(int i=0;i<=k;++i)printf("%d\n",ans[i]);delete S;return 0;
}

谢谢阅读。

转载于:https://www.cnblogs.com/Capella/p/9130807.html

[Luogu 1197] JSOI2008 星球大战相关推荐

  1. Luogu P1197 [JSOI2008]星球大战

    经巨佬们指教,得知要用:逆向思维法(这个一定要想到啊QwQwQ) 之后想了想,发现我大致思路跟第一篇题解比较像(后来AC代码的细节不一样,我是在每次'恢复'循环开始时计数的,题解是循环末尾,大同小异吧 ...

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

    洛谷 P1197 [JSOI2008]星球大战 题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了 ...

  3. bzoj 1015: [JSOI2008]星球大战starwar

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

  4. P1197 [JSOI2008]星球大战 题解

    题目:P1197 [JSOI2008]星球大战 并查集 - 图论 - 连通块 题目大意 给出一个 n n n 个点, m m m 条边的无向图,并告诉你 k k k 个攻击目标的编号 敌人依次攻击这 ...

  5. BZOJ1015 [JSOI2008]星球大战starwar(并查集)

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

  6. 【BZOJ 1015】 [JSOI2008]星球大战starwar

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

  7. [JSOI2008]星球大战

    https://www.luogu.org/problemnew/show/P1197 题解:倒向并查集 C++版本一 #include<iostream> #include<cst ...

  8. Luogu P1198 [JSOI2008]最大数 线段树

    P1198 [JSOI2008]最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制: ...

  9. 2019.7.14 并查集P1197 [JSOI2008]星球大战 说能过那是假的(动态规划) cometoj #c6 双倍快乐

    星球大战 这题是使用了一个total变量持续记录连通块数目,极大减少了判断时间 一开始我直接用从0到n-1遍历找连通块,这样绝对超时 通过代码如下 #include<bits/stdc++.h& ...

  10. P1197 [JSOI2008]星球大战~写题笔记

    题目:https://www.luogu.org/problemnew/show/P1197 #include<iostream> #include<algorithm> #i ...

最新文章

  1. 1052 Linked List Sorting
  2. linux whois工具,CentOS如何安装whois命令
  3. [六省联考2017]分手是祝愿(期望+DP)
  4. webpack.DefinePlugin使用介绍
  5. 不吹不擂,一文揭秘鸿蒙操作系统
  6. 牛客网_PAT乙级_1029有几个PAT(25)【输入字符串并strlen计算长度】
  7. 在Kubernetes上运行SAP UI5应用
  8. 连接mysql数据库_解决Navicat连接MySQL数据库报错问题
  9. Spring学习(10)--- @Qualifier注解
  10. IntelliJ Idea 2017 免费激活方法
  11. python静态方法可以被继承吗_python 类的继承 实例方法.静态方法.类方法的代码解析...
  12. linux 进程优先级 chrt,关于Linux进程优先级的一些疑问
  13. 什么是 “动态规划” , 用两个经典问题举例。
  14. 可变集合和不可变集合
  15. Android 微信高性能日志存储库Xlog的使用
  16. ICE 3.7.4 实现客户服务端hello world
  17. 支付宝小程序设置服务器维护,支付宝小程序配置
  18. android qq存储方式,android(5)(模拟QQ登录,文件存储,SD卡存储,SharedPreferences存储)...
  19. 用php计算自由落体,JavaScript模拟自由落体
  20. opencv - viz 画出SLAM轨迹

热门文章

  1. linux top 网络,Linux Top 详解
  2. 镀铬亮条怎么修复_「日系之光」曾经的亚洲C级车排面,十二代丰田皇冠全面修复日记...
  3. JDBC学习(一、概述)
  4. Linux chapter 6
  5. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第4节 maven生命周期和概念模型图_09maven概念模型图...
  6. 30个免费网页设计模板
  7. U盘做启动盘后,如何恢复原始容量
  8. 哈希(1) hash的基本知识回顾
  9. hibernate could not resolve property
  10. Libevent源码解析