问题 G: 军团再临

时间限制: 1 秒   内存限制: 128 MB
提交: 48   解决: 19
提交  状态

题目描述

燃烧军团大举入侵艾泽拉斯,现以在艾星建立了大量的军事要塞,这些要塞通过若干个道路直接或间接连接。如果两个城市是连通的,那么它们处于同一连通块之中。现在抗魔联军发明了一种威力巨大的法术,每发动一次将会直接摧毁一个军事要塞,同时也摧毁与他相连的道路。每进行一次打击,联军需要知道未被摧毁的要塞的连通块数。联军会给出最初要塞的连通情况以及打击顺序,请快速计算每次打击之后未被摧毁的要塞的连通块数量。

输入

输入第一行为两个整数n,m分别表示要塞个数和道路个数。1<=n<=100000,1<=m<=200000。

接下来m行每行两个整数x,y (1<=x,y<=n)表示要塞x和要塞y之间有一条道路连接。

接下来一行为一个整数k表示将会打击的要塞数量。1<=k<=n。

接下来k行每行一个整数v表示会打击的城市这k个数互不相同,1<=v<=n。

输出

第一行输出最初的连通块个数,后k行一次输出每次打击后的结果。

样例输入

8 13
1 2
2 7
7 6
6 1
1 7
2 3
3 4
4 5
5 6
8 2
8 3
8 7
4 7
5
2
7
4
6
8

样例输出

1
1
1
2
3
3

提示

提交  状态

总结,自己还是太菜,看到数据长没人交就认为这到题难(其实还真算不简单)在听了学长说的后有点思路,但还不知道咋写,一看完标程瞬间明白,这是一道很水的并查集,可以倒着推。。。。。
自己对并查集还没太理解,不知道什么时候该用,不会活用。。。

代码

#include<cstdio>
#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
int ss[400005];
vector<int>q[400005];
int vis[400005]={0};
int viss[400005]={0};
int hk[400005]={0};
int sum[400005]={0};
int find(int x)
{if(x==ss[x]) return x;return ss[x]=find(ss[x]);
}
int main()
{ios::sync_with_stdio(false);int n,m;cin>>n>>m;for(int i=1;i<=n;i++)ss[i]=i;for(int i=0;i<m;i++){int x,y;cin>>x>>y;q[x].push_back(y);q[y].push_back(x);}int gj;cin>>gj;for(int i=1;i<=gj;i++){cin>>hk[i];vis[hk[i]]=1;}for(int i=1;i<=n;i++){if(vis[i]) continue;for(int j=0;j<q[i].size();j++){if(vis[q[i][j]]) continue;int xx=find(i);int yy=find(q[i][j]);if(xx!=yy) ss[xx]=yy;}}for(int i=1;i<=n;i++){if(vis[i]) continue;int k=find(i);if(!viss[k]){sum[gj+1]++;viss[k]=1;}}//  cout<<ss[i];for(int i=gj;i>=1;i--){vis[hk[i]]=0;sum[i]=sum[i+1];int flag=0;for(int j=0;j<q[hk[i]].size();j++){// cout<<q[hk[i]][j]<<"  "<<hk[i]<<vis[q[hk[i]][j]]<<endl;if(vis[q[hk[i]][j]]) continue;flag++;int xx=find(hk[i]);int yy=find(q[hk[i]][j]);if(xx!=yy){if(hk[i]!=xx) sum[i]--;ss[xx]=yy;}}if(flag==0) sum[i]++;}for(int i=1;i<=gj+1;i++)cout<<sum[i]<<endl;return 0;
}

加油!!!努力!!!

河南省多校联萌-HAUT-1285-军团再临相关推荐

  1. 2016弱校联萌十一专场10.2

    F.floyd-warshell 20000个点,距离为1的所有边求最短路 感觉就是单纯的生成树求最短路(最近公共祖先) 然后把去掉的边还原 把涉及的点bfs一下拼出最短路 赛场注意不要被这种题目吓到 ...

  2. 弱校联萌十一大决战之如日中天A Ariel【二进制+排序】

    这个题也是太不好懂了==看了过的代码才明白(⊙﹏⊙)b 不过当时就能想到二进制也挺欣慰的 什么叫做"相同的必须有,没有的必须没有,其他的无所谓?"==>后来查询中的给的特征与 ...

  3. [弱校联萌2016]2016弱校联盟十一专场10.2

    比赛链接:https://www.bnuoj.com/v3/contest_show.php?cid=8520 A.无非两种情况,点在体里和点在体外.在体外分三种情况,分别是到顶点的距离最小.到棱的距 ...

  4. [弱校联萌2016]2016弱校联盟十一专场10.3

    比赛链接:https://www.bnuoj.com/v3/contest_show.php?cid=8504#info A.找两个数乘积是连续上升并且最大的. 1 #include <bits ...

  5. [弱校联萌2016]2016弱校联盟十一专场10.5

    比赛链接:https://www.bnuoj.com/v3/contest_show.php?cid=8506#info I.裸数位dp,dp[l][pre][dir][fz]表示长度为l的时候上一个 ...

  6. 弱校联萌十一大决战之如日中天-C. Cinderella

    Cinderella is given a task by her Stepmother before she is allowed to go to the Ball. There are N (1 ...

  7. 弱校联萌十一大决战之如日中天C Cinderella

    Input/Output: standard input/output Cinderella is given a task by her Stepmother before she is allow ...

  8. zzuli2181-GJJ的日常之暴富梦-多校联萌(四)

    传送门:https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=2181 2181: GJJ的日常之暴富梦 Time Limit: 1 Sec   Memor ...

  9. 湖南长郡2021高考成绩查询时间,2021年湖南新高考六校、长郡十五校联考时间公布...

    2021年湖南新高考六校.长郡十五校联考时间公布 导读:距离2021年高考时间仅剩不到一百天,各个省份都的高三学子都进入紧张阶段.开始了各种模拟考试.2021届湖南省炎德英才大联考的考试时间也已经公布 ...

最新文章

  1. 浅谈Android五大布局——LinearLayout、FrameLayout和AbsoulteLa
  2. 对于细节的一些处理和领悟
  3. ARM指令寻址方式之: 数据处理指令的寻址方式
  4. .NET Core 的过去、现在和未来
  5. 活动:北京Xamarin分享会第8期(2017年11月11日)
  6. iOS开发UIResponder简介API
  7. Enterprise Library 2.0 插件介绍:Avanade Integration Pack
  8. GitLab持续集成在商用项目中的应用实践
  9. 阿里2019财年收入达3768.44亿元 盘前涨幅一度超4%
  10. 走进javascript——解开switch之谜
  11. pythonpost请求json_将JSON字符串作为post请求发送
  12. 大数据分析平台和工具,主要有哪些?
  13. MySQL数据库实验练习题
  14. 【python游戏】新的一年快来变身兔兔战士打败獾守护兔兔吧~
  15. 【RPC】序列化与反序列化
  16. Abp 微信小程序登录 基本的流程和实践
  17. “幽幽远远”正式开张了,但是我的心情没有往日的开怀
  18. LONGSYS 64G M6固态硬盘SM2244G主控开卡
  19. 高端大气星空新品发布会PPT模板
  20. Ptcms在php7.2.10下的采集调试

热门文章

  1. idea编译Java项目的部分java文件并且生成class文件
  2. 如何查看电脑上的mysql版本
  3. Python编写微信打飞机小游戏(九)
  4. android videoview 播放之前短暂黑屏
  5. 高校小姐姐拍了拍你,你有一台天猫精灵待领取
  6. tmux配置以及常用命令
  7. python生成随机数列表并排序_python_生成随机数与列表排序
  8. 谷歌免费云服务器Colab使用入门
  9. mailto用法详解
  10. 《哪吒》在美热映,中国动画崛起之路还需要什么?