值得一做》关于并查集的进化题目 BZOJ1015(BZOJ第一页计划)(normal-)

  这道题和以前做过的一道经典的洪水冲桥问题很像,主要做法是逆向思维。(BZOJ第10道非SB题纪念)

  先给出题目

Description

  很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系。某一天,凭着一个偶然的
机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球。这些星球通过特殊的以太隧道互相直
接或间接地连接。 但好景不长,很快帝国又重新造出了他的超级武器。凭借这超级武器的力量,帝国开始有计划
地摧毁反抗军占领的星球。由于星球的不断被摧毁,两个星球之间的通讯通道也开始不可靠起来。现在,反抗军首
领交给你一个任务:给出原来两个星球之间的以太隧道连通情况以及帝国打击的星球顺序,以尽量快的速度求出每
一次打击之后反抗军占据的星球的连通快的个数。(如果两个星球可以通过现存的以太通道直接或间接地连通,则
这两个星球在同一个连通块中)。

Input

  输入文件第一行包含两个整数,N (1  < =  N  < =  2M) 和M (1  < =  M  < =  200,000),分别表示星球的数目和以太隧道的数目。星球用 0 ~ N-1的整数编号。接下来的M行,每行包括两个整数X, Y,其中(0 < = X <>Y 表示星球x和星球y之间有“以太”隧道,可以直接通讯。接下来的一行为一个整数k,表示将遭受攻击的星球的数目。接下来的k行,每行有一个整数,按照顺序列出了帝国军的攻击目标。这k个数互不相同,且都在0到n-1的范围内。

Output

  输出文件的第一行是开始时星球的连通块个数。接下来的N行,每行一个整数,表示经过该次打击后现存星球的连通块个数。

Sample Input

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

Sample Output

1
1
1
2
3
3
  对于这道题,每次摧毁一个点,直接一遍一遍维护强连通分量,是基本不可做的。
  所以我们可以试着考虑倒着做。
  先加入那些从始至终也没有被摧毁的点,然后倒着维护:每次新加入点后强连通分量的个数,用并查集维护这一过程。(这我数组开小了调的大半天/再见)
然后局部地方稍微优化
 1 #include<stdio.h>
 2 struct shit{
 3     int aim,next;
 4 }e[401000];
 5 int head[401000],num,s[401000],ans[401000],rank[401000],fa[401000],point;
 6 bool mp[401000],us[401000];
 7 int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
 8 void fuck(int x,int y)
 9 {
10     e[++point].aim=y,e[point].next=head[x],head[x]=point;
11 }
12 void insert(int x)
13 {
14     int i=head[x],p=find(x),q;
15     while(i)
16     {
17         if(us[e[i].aim])
18         {
19             q=find(e[i].aim);
20             if(q!=p)fa[q]=p,num--;
21         }
22         i=e[i].next;
23     }
24 }
25 int main()
26 {
27     int d,n,m,a,b;
28     scanf("%d%d",&n,&m);
29     for(int i=1;i<=n;++i)fa[i]=i;
30     for(int i=1;i<=m;++i)
31     {
32         scanf("%d%d",&a,&b);
33         fuck(a,b);
34         fuck(b,a);
35     }
36     scanf("%d",&d);
37     for(int i=1;i<=d;++i)
38     {
39         scanf("%d",&s[i]);
40         mp[s[i]]=true;
41     }
42     for(int i=0;i<n;++i)
43         if(!mp[i])
44         {
45             num++;
46             insert(i);
47             us[i]=true;
48         }
49     ans[d+1]=num;
50     for(int i=d;i;i--)
51     {
52         num++;
53         insert(s[i]);
54         us[s[i]]=true;
55         ans[i]=num;
56     }
57     for(int i=1;i<=d+1;++i)printf("%d\n",ans[i]);
58     return 0;
59 }
View Code

 

转载于:https://www.cnblogs.com/PencilWang/p/5925324.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Functional ProgrammingLazy Code:被我忘记的迭代器

本文给出一个Functional Programming和Lazy Code的一个例子。跟着思路走&#xff0c;关键的地方会有相应的说明。 我们想实现一个判断"素数"的小程序&#xff0c;如下&#xff1a; using System;namespace FunctionalProgramming {class Program{static void Main(st…

PhpStorm配置Xdebug调试PHP程序

From: http://blog.csdn.net/ljfrocky/article/details/46531137这篇文章主要介绍了如何使用PhpStorm Xdebug调试PHP程序&#xff0c;需要的朋友可以参考下。运行环境PhpStorm版本&#xff1a;8.0.3 PHP版本&#xff1a;5.4.12 xdebug版本&#xff1a;php_xdebug-2.2.3-5.4-vc…

对刚

3 /*直接链表模拟 */ #include<cstdio> #include<iostream> #define M 100010 using namespace std; int next[M],fa[M],vis[M],n,t; int main() {//freopen("jh.in","r",stdin);//freopen("resist.in","r",stdin);//freo…

动态修改el-input样式;动态修改elmentUI元素样式;css变量

场景&#xff1a;正常我们动态修改div元素的样式&#xff0c;使用:style和:class即可&#xff1b;但是我们想要动态修改element的组件样式时候&#xff0c;例如el-input字体颜色&#xff0c;由于el-input的样式嵌套很深&#xff0c;我们需要修改的实际是.el-input__inner这个样…

【Mac】sublime text3标题栏显示文件完整路径

开发的兄弟对于sublime text一定不会陌生&#xff0c;目前在mac上使用这个软件遇到一个小问题&#xff0c;就是标题栏只显示了文件名&#xff0c;而不是文件全路径&#xff0c;所以当一个项目里同名的文件比较多的时候&#xff0c;就怕搞错文件。因此&#xff0c;我非常希望标题…

Error: listen EADDRINUSE: address already in use :::7197

vue启动项目报 Error: listen EADDRINUSE: address already in use :::7197 我是直接将项目的终端关闭&#xff0c;然后重新打开终端输入 npm run dev 就启动好了

SpringAPI手动创建代理对象——ProxyFactory

2019独角兽企业重金招聘Python工程师标准>>> 可以通过注解的方式来自定义代理对象的创建&#xff0c;同时也可以通过SpringAPI&#xff0c;手动编程的方式来创建代理对象。 几个重要的API&#xff1a; ProxyFactory\MethodInterceptor\Advice\AfterReturningAdvice\…

关于Pac-Man,你所要了解的 一切

2019独角兽企业重金招聘Python工程师标准>>> 不论何时&#xff0c;它一直都是最伟大的游戏之一。这里有许多有关它的有趣的内幕&#xff1a;Pac-Man。 第一, 在一天之内重新创建Pac-Man 。 第二,对游戏种的每个鬼背后的人工智能的 一个非常详细的探讨 。 事实证明…

grunt入门 出处:http://artwl.cnblogs.com

grunt-contrib-uglify uglify是一个文件压缩插件&#xff0c;项目地址&#xff1a;https://github.com/gruntjs/grunt-contrib-uglify 本文将以一个DEMO来展示如何使用uglify插件。 DEMO环境 package.json: {"name": "grunt-demo","version": &q…

探讨NDK编译错误ld.exe: Dwarf Error: mangled line number section.

如题所示的NDK编译错误是什么原因导致的&#xff1f;我的困惑今天在把WIN32下的一个工程移植到ANDROID时遇到上述错误&#xff0c;感到非常困惑。错误如下&#xff1a;D:/ndkr8/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi…

Visual Studio Code之常备快捷键

From: https://blog.csdn.net/u010019717/article/details/50443970 孙广东 2015.12.31 官方快捷键大全&#xff1a;https://code.visualstudio.com/docs/customization/keybindings Visual Studio Code是个牛逼的编辑器&#xff0c;启动非常快&#xff0c;完全可以用来代替其…

jquery中cookie用法实例详解(获取,存储,删除等)

这篇文章主要介绍了jquery中cookie用法,结合实例详细分析了jQuery操作cookie的获取,存储,删除等操作,并附带了Jquery操作Cookie记录用户查询过信息实现方法,需要的朋友可以参考下本文实例讲述了jquery中cookie用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a; cook…

通过挂载系统光盘搭建本地yum仓库的方法

1、配置本地yum源&#xff08;挂载光盘&#xff09; mkdir /medir/cdrom(创建目录) mount /dev/cdrom / medir/cdrom (挂载到/ medir/cdrom目录&#xff09; 2、修改yum配置文件 3. 修改挂载路径/ medir/cdrom&#xff0c; 将gpgcheck1改为0 enabled0改为1. 4. yum list …

谷歌划词翻译

谷歌划词翻译是个谷歌插件 复制及时翻译很好用 插件下载地址 配置谷歌翻译方法

教你如何在linux 下批量卸载

教你如何在linux 下批量卸载 最 近本来想在linux 下配置 JDK 6.0 用来开发java&#xff0c;然后遇到很多麻烦&#xff0c;一开始的时候屁颠屁颠的到SUN的网站去下载个 JRE 的bin 文件&#xff0c;这个文件比较小&#xff0c;几十MB而已&#xff0c;安装的时候它自动安装在 /usr…

vue项目启动成功浏览器不显示

场景&#xff1a;vue项目启动成功&#xff0c;无任何报错&#xff0c;但是浏览器却一直加载&#xff0c;页面始终是空白。 如果你的项目用到了element-ui的标签页组件el-tabs组件&#xff0c;那么大概率是此组件引起的浏览器卡死问题。 可以现将el-tabs的代码注释掉&#xff0c…

几种常用的清除浮动方法(一)

From: https://www.cnblogs.com/nxl0908/p/7245460.html 1、父级div定义伪类&#xff1a;after和zoom <style type"text/css"> .div1{background:#000080;border:1px solid red;}.div2{background:#800080;border:1px solid red;height:100px;margin-top:10px…

h5下载静态文件

1.需要将文件放src的下面的static的文件夹内 2.如果下载的是浏览器不能识别的&#xff08;例如&#xff1a;.exe,.zip,.doc等&#xff09;内容&#xff0c;浏览器会直接进行下载&#xff0c;但是如果下载的是浏览器可以识别的&#xff08;例如&#xff1a;.png,.jpg等&#xff…

浮动的清除 -- 四种方法

From: https://www.cnblogs.com/gchlcc/p/5824200.html 前言 -- 一个父亲不能被自己浮动的儿子&#xff0c;撑出高度。 开胃小菜 来看一个实验&#xff1a;现在有两个div&#xff0c;div身上没有任何属性。每个div中都有li&#xff0c;这些li都是浮动的。我们本以为这些li&a…

eq相等,smarty 比较操作符!时间戳

2019独角兽企业重金招聘Python工程师标准>>> eq相等&#xff0c; ne、neq不相等&#xff0c; gt大于&#xff0c; lt小于&#xff0c; gte、ge大于等于&#xff0c; lte、le 小于等于&#xff0c; not非&#xff0c; mod求模。 is [not] div by是否能被某数整除&am…