题面: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

并查集+时光倒流 || [JSOI2008]星球大战starwar || BZOJ 1015 || Luogu P1197的更多相关文章

  1. 【并查集】bzoj1015 [JSOI2008]星球大战starwar

    倒着处理删点,就变成了加点,于是并查集. #include<cstdio> using namespace std; #define N 400001 int fa[N],kill[N], ...

  2. 1015: [JSOI2008]星球大战starwar - BZOJ

    Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过 ...

  3. 并查集+优先队列+启发式合并 || 罗马游戏 || BZOJ 1455 || Luogu p2713

    题面:P2713 罗马游戏 题解: 超级大水题啊,特别水.. 并查集维护每个人在哪个团里,优先队列维护每个团最低分和最低分是哪位,然后每次判断一下哪些人死了,随便写写就行 并查集在Merge时可以用启 ...

  4. BZOJ1015[JSOI2008]星球大战starwar[并查集]

    1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 5253  Solved: 2395[Submit ...

  5. [1015][JSOI2008]星球大战starwar(并查集)

    1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 2124  Solved: 909[Submit] ...

  6. BZOJ1015 [JSOI2008]星球大战starwar(并查集)

    1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 3895  Solved: 1750[Submit ...

  7. BZOJ 1015:[JSOI2008]星球大战starwar(逆向处理+并查集)

    [JSOI2008]星球大战starwar                                                时间限制: 3 Sec 内存限制: 162 MB[题目描述] ...

  8. [Bzoj1015][JSOI2008]星球大战starwar(并查集)(离线处理)

    1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 6849  Solved: 3204[Submit ...

  9. BZOJ 1015: [JSOI2008]星球大战starwar 并查集

    1015: [JSOI2008]星球大战starwar Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝 ...

随机推荐

  1. linux常用、常见错误

    1.md5加密使用 oppnssl md5 加密字符串的方法 [root@lab3 ~]# openssl //在终端中输入openssl后回车. OpenSSL> md5 //输入md5后回车 ...

  2. Golang中用interface{}接收任何参数与强转

    函数的传值中,interface{}是可以传任意参数的,就像java的object那样.下面上我第一次想当然写的 ** 错误 **代码 package main func main() { Any(2 ...

  3. Day05:集合操作——线性表(二) / 查找表 / 文件操作——File(一)

    文件操作:https://www.cnblogs.com/wsnb8/p/11403626.html

  4. Linux-把任务放到后台

    公司用的服务器,只能ssh远程操作,每天都会自动退出账户,不知道怎么回事儿,很郁闷.所以每天早起重新登录后发现进程已经关闭了,因为你运行的任务是和terminal关联在一起的,terminal关闭后, ...

  5. Django模板系统-母板和继承

    母板和继承 母版 html页面,提取多个页面的公共部分 定义多个block块,需要让子页面进行填充 <head> {% block page-css %} {% endblock %} & ...

  6. OpenStack组件——Neutron网络服务(2)

    1.虚拟机获取 ip 1)用 namspace 隔离 DHCP 服务 Neutron 通过 dnsmasq 提供 DHCP 服务,而 dnsmasq 通过 Linux Network Namespac ...

  7. MVC与MTV模型及Django请求的生命周期

    MVC模型 MVC:Model View Controller M: 模型.是应用程序中用于处理应用程序数据逻辑的部分 V:视图.是应用程序汇总处理数据显示的部分 C:控制器.是应用程序中处理用户交互 ...

  8. hue改下载行数

    参考: https://blog.csdn.net/lingbo229/article/details/85991230 修改hue所在机器的默认配置后,重启hue即可 find / -name be ...

  9. 面试35-删除字符串重复字符-删除出现在第二个字符串中的字符-第一个只出现一次的字符-hash表计数

    #include<iostream>#include<algorithm>#include<functional>using namespace std;char ...

  10. JS中的继承(下)

    JS中的继承(下) 在上一篇 JS中的继承(上) 我们介绍了3种比较常用的js继承方法,如果你没看过,那么建议你先看一下,因为接下来要写的内容, 是建立在此基础上的.另外本文作为我个人的读书笔记,才疏 ...