博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【BZOJ 1015】[JSOI2008]星球大战starwar
阅读量:6709 次
发布时间:2019-06-25

本文共 1971 字,大约阅读时间需要 6 分钟。

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
2 const int N=400100; 3 struct ee{
int to,next;}e[N*2]; 4 int ans[N],fa[N],x[N],head[N]; 5 int tot,cnt,m,n,k; 6 bool pd[N]; 7 int root(int x){
if (fa[x]==x) return x;fa[x]=root(fa[x]);return fa[x];} 8 void add(int x){ 9 int q=root(x);10 for (int i=head[x];i;i=e[i].next){11 if (pd[e[i].to]) continue;12 int p=root(e[i].to);13 if (p!=q) fa[p]=q,tot--;14 }15 }16 17 void ins(int u,int v){18 e[++cnt].to=v;e[cnt].next=head[u];head[u]=cnt;19 }20 21 int main(){22 scanf("%d%d",&n,&m);23 for (int i=1;i<=n;i++) fa[i]=i;24 int u,v;25 for(int i=1;i<=m;i++) {26 scanf("%d%d",&u,&v);27 ins(u+1,v+1);ins(v+1,u+1);28 }29 scanf("%d",&k);30 for (int i=1;i<=k;i++){31 scanf("%d",&x[i]);32 x[i]++;33 pd[x[i]]=1;34 }35 for (int i=1;i<=n;i++) if(!pd[i]){36 tot++;37 add(i);38 }39 ans[k+1]=tot;40 for (int i=k;i>0;i--){41 tot++;42 add(x[i]);43 ans[i]=tot;44 pd[x[i]]=0;45 }46 for (int i=1;i<=k+1;i++) printf("%d\n",ans[i]);47 }

 

转载于:https://www.cnblogs.com/wuminyan/p/5189860.html

你可能感兴趣的文章
Nginx--安装和配置
查看>>
网上邻居无法显示本地连接
查看>>
android:contentDescription的作用及使用方法
查看>>
在libvirt 中体验容器
查看>>
字符串类的重量级实现——Rope的初步了解
查看>>
数据库镜像和日志传送配合完成高可用性以及灾难恢复
查看>>
突破单位wifi限制
查看>>
Windows Server 2016 + Exchange 2016 +Office365混合部署(四)
查看>>
windows server 2008下载及序列号
查看>>
Solaris 10源码安装编译出错的一种处理办法
查看>>
Cocos2d-x 2.x编程之CCNotificationCenter
查看>>
Spark 的 Shell操作,核心概念,构建独立应用
查看>>
Lync 小技巧-16-查看Lync给谁打电话了
查看>>
在android中读取联系人信息的程序,包括读取联系人姓名、手机号码和邮箱
查看>>
可能吞噬硬件的无服务器云
查看>>
如何自行搭建一个威胁感知大脑 SIEM?| 硬创公开课
查看>>
安全圈老司机为什么会在这个游戏里翻车?(内附详细解谜攻略)
查看>>
大数据将带来哪些“健康红利”?
查看>>
技术派的梦想旅行,用大数据推动旅游2.0时代到来
查看>>
高校 WiFi 9 大谬论
查看>>