题面:P1197 [JSOI2008]星球大战

题解:

坑点有点多啊,加上我本来就有点头昏脑涨,一道水题写了一万年。。

并查集不支持拆开(但是可以撤销合并),只支持合并。所以把询问离线了,从最后状态到初状态开始一个个往当前图里加点。

CZL:对于只有删除点/边而不增加点/边,且允许离线的题,可以考虑时光倒流,先建出最终情况,再倒着把点/边加回去。

代码:

 #include<cstdio>
using namespace std;
inline int rd(){
int x=; char c=getchar();
while(c<''||c>'')c=getchar();
while(c>=''&&c<=''){x=x*+c-''; c=getchar();}
return x;
}
const int maxn=4e5+,maxm=2e5+;
int N,M,fa[maxn],QUE[maxn],num_edge=,edge_head[maxn];
int u,v,K,cnt=,f1,f2,ans[maxn];
bool atkd[maxn];
struct Edge{ int to,nx; }edge[maxm<<];
inline void Add_edge(int from,int to){
edge[++num_edge].nx=edge_head[from];
edge[num_edge].to=to;
edge_head[from]=num_edge;
return;
}
inline int getf(int n){
if(fa[n]==n) return n;
fa[n]=getf(fa[n]);
return fa[n];
}
int main(){
N=rd(); M=rd();
for(int i=;i<N;i++) fa[i]=i;
for(int i=;i<=M;i++){
u=rd(); v=rd();
Add_edge(u,v);
Add_edge(v,u);
f1=getf(u); f2=getf(v);
if(f1!=f2) fa[f1]=f2;
}
for(int i=;i<N;i++){
if(fa[i]==i) ans[]++;
fa[i]=i;
}
K=rd();
for(int i=;i<=K;i++){
QUE[i]=rd();
atkd[QUE[i]]=;
}
for(int i=;i<N;i++)
if(atkd[i]==){
for(int j=edge_head[i];j;j=edge[j].nx){
int y=edge[j].to;
if(atkd[y]) continue;
f1=getf(i); f2=getf(y);
if(f1!=f2) fa[f1]=f2;
}
}
for(int i=;i<N;i++)
if(atkd[i]==&&fa[i]==i) cnt++;
for(int k=K;k>=;k--){
ans[k]=cnt;
cnt++;
int x=QUE[k];
atkd[x]=;
for(int i=edge_head[x];i;i=edge[i].nx){
int y=edge[i].to;
if(atkd[y]) continue;
f1=getf(x); f2=getf(y);
if(f1!=f2){
cnt--;
fa[f1]=f2;
}
}
}
for(int i=;i<=K;i++) printf("%d\n",ans[i]);
return ;
}

By:AlenaNuna

最新文章

  1. 初步了解nodejs
  2. pandas 透视表 pivot_table
  3. python中字符串与列表的相互转换
  4. [css3]搜索框focus时变长
  5. android软件开发之webView.addJavascriptInterface循环渐进【二】
  6. Python入门-----介绍
  7. RedHat下MySQL 5.6 安装、维护
  8. RedHat6.5网卡问题总结
  9. js获取菲波那契数列的第N个元素
  10. /var/spool/clientmqueue目录~清理
  11. pinpoint vs druid
  12. LeetCode链表相加-Python&lt;二&gt;
  13. dedecms 5.7 采集目标文章的发布时间 采集后变成当前本地时间
  14. apache .htacess
  15. 【刷题】LOJ 6226 「网络流 24 题」骑士共存问题
  16. AdjustWindowRect 与 SetWindowPos
  17. redis.conf配置文件说明
  18. redis事务,分布式锁
  19. C语言入门语法
  20. Noip2015提高组解题报告

热门文章

  1. shell中命令作为变量使用
  2. java7:(Files.walkFileTree())
  3. python基础(代码规范、命名规范、代码缩进、注释)
  4. 利用fiddler+nginx模拟流量识别与转发
  5. Linux 使用中history 默认记录数不够用了?
  6. 调用redis封装好的JedisUtils接口实现锁库
  7. CornerNet 算法笔记
  8. 【图像-视频处理】YUV420、YV12与RGB24的转换公式
  9. VS显示代码行号
  10. &quot;alert(1) to win&quot; writeup