BZOJ1015 JSOI2008 星球大战starwars 并查集
题意:给定一张无向图,不断从图上删点,询问每次删点后联通块的数量
题解:离线,在删完点后的图上不断加点,用并查集维护联通性。
#include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> using namespace std;const int MAXN=400000+2; struct Hash{int u;Hash *next; }*Tab[MAXN],Mem[MAXN]; int N,M,C,K,P[MAXN],Ans[MAXN],f[MAXN]; bool Flag[MAXN];void Insert(int u,int v){Mem[C].u=v,Mem[C].next=Tab[u];Tab[u]=&Mem[C];C++; }int Find(int x){ return x==f[x]?x:f[x]=Find(f[x]);}int main(){scanf("%d %d",&N,&M);for(int i=1,u,v;i<=M;i++){scanf("%d %d",&u,&v);Insert(u,v),Insert(v,u);}scanf("%d",&K);for(int i=1;i<=K;i++) scanf("%d",P+i),Flag[P[i]]=1;for(int i=0;i<N;i++) f[i]=i;for(int i=0;i<N;i++)if(!Flag[i]){Ans[K+1]++;for(Hash *p=Tab[i];p;p=p->next)if(!Flag[p->u]){int a=Find(i),b=Find(p->u);if(a!=b) f[a]=b,Ans[K+1]--;}}Ans[K]=Ans[K+1];for(int i=K;i;i--,Ans[i]=Ans[i+1]){Flag[P[i]]=0,Ans[i]++;for(Hash *p=Tab[P[i]];p;p=p->next)if(!Flag[p->u]){int a=Find(P[i]),b=Find(p->u);if(a!=b) f[a]=b,Ans[i]--;}}for(int i=1;i<=K+1;i++) printf("%d\n",Ans[i]);return 0; }
View Code
转载于:https://www.cnblogs.com/WDZRMPCBIT/p/6443496.html
BZOJ1015 JSOI2008 星球大战starwars 并查集相关推荐
- [BZOJ1015] [JSOI2008] 星球大战starwar (并查集)
Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的 机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通 ...
- 洛谷 p1197 [JSOI2008]星球大战(并查集)
洛谷 P1197 [JSOI2008]星球大战 题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了 ...
- BZOJ1015 [JSOI2008]星球大战starwar(并查集)
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MB Submit: 3895 Solved: 1750 [Subm ...
- 【JSOI2008】星球大战 (并查集)
题面 Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星 ...
- bzoj1015 [JSOI2008]星球大战 并查集
对于这种连续删边的问题,可以离线,这样就变成了加边,usaco有类似的题.. 码: #include<iostream> #include<cstdio> #include&l ...
- 【BZOJ1015】【JSOI2008】星球大战 并查集
题目大意 给你一张\(n\)个点\(m\)条边的无向图,有\(q\)次操作,每次删掉一个点以及和这个点相邻的边,求最开始和每次删完点后的连通块个数. \(q\leq n\leq 400000,m\le ...
- [JSOI2008]星球大战 并查集
这一阵子因为好多原因,学习时间有点少,还好时间不算很长. 这两天写了道并查集的题目,感觉不错. 题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治着整个星系. 某一天,凭着一个偶 ...
- 【BZOJ1015】【tyvj3487】星球大战starwar,特别的并查集技巧
传送门1 传送门2 写在前面:无 思路:比较简单的并查集题目,正着做很难,我们可以倒着想,询问倒着排,相当于每次加入一个星球并把可以连的边都连上,查一下联通块数量就行了 注意:必须两个顶点都没有被摧毁 ...
- 【BZOJ】1015 [JSOI2008]星球大战starwar(并查集+离线处理)
Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的 机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通 ...
最新文章
- AI 技术实力图谱全解析!2018 中国 AI 开发者大会重磅来袭
- 再见,PyTorch!
- Linux下的任务计划
- getDimension/getDimensionPixelSize/getDimensionPixelOffset()
- IT行业热点商业模式随笔第七章——商业模式创新规律
- TP查看已部署的TP框架的版本
- [跟我一起涨姿势]未注册服务的RHEL6.4使用网易的CentOS源
- Geolocation :基于浏览器的定位服务
- 自学成才翁_仅因为您是自学成才,并不意味着您必须独自学习。
- RabbitMQ入门学习系列(三).消息发送接收
- 重构手法之重新组织数据【1】
- mongodb 学习第二天,基本操作
- python下载网页内容_使用selenium下载整个html页面内容
- 20130408-[转]贴片钽电容的封装、尺寸和标识
- Android tips(十)--允许模拟位置在Android M下的坑
- 计算机视觉(三)图像拼接
- IT男最新躺枪:武汉恋爱培训班教搭讪女孩技巧 学员多为IT男
- Shell脚本三种循环
- 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
- 如何在 微软Microsoft 官网 下载 office365