题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3237

cdq分治+缩点。

可以每次处理的时候把除l~r之外的边的端点都连起来。然后去跑cdq分治。

当l==r的时候让那些修改边不连然后跑一边并查集。

#include<cstring>
#include<iostream>
#include<algorithm>
#include<cstdio>
#define rep(i,l,r) for (int i=l;i<=r;i++)
#define down(i,l,r) for (int i=l;i>=r;i--)
#define clr(x,y) memset(x,y,sizeof(x))
#define maxn 200500
using namespace std;
struct data{int x,y,id,k,b;
}a[][maxn];
int b[maxn][];
int fa[maxn],np[maxn],pos[maxn],n,m,Q;
int read(){
int x=,f=; char ch=getchar();
while (!isdigit(ch)) {if (ch=='-') f=-; ch=getchar();}
while (isdigit(ch)) {x=x*+ch-''; ch=getchar();}
return x*f;
}
int find(int x){
if (fa[x]==x) return x;
return fa[x]=find(fa[x]);
}
void cdq(int dep,int l,int r,int n,int m){
rep(i,,m){
data &c=a[dep][i],&c2=a[dep-][i];
c=(data){c2.x,c2.y,c2.id,,};
pos[c2.id]=i;
}
if (l==r){
rep(i,,b[l][]) a[dep][pos[b[l][i]]].b=;
rep(i,,n) fa[i]=i;
int cnt=;
rep(i,,m) if (a[dep][i].b!=) {
data c=a[dep][i];
int x=find(c.x),y=find(c.y);
if (x!=y) fa[x]=y,cnt++;
}
if (cnt==n-) puts("Connected");
else puts("Disconnected");
return;
}
rep(i,l,r) rep(j,,b[i][]) a[dep][pos[b[i][j]]].k=;
rep(i,,n) fa[i]=i;
rep(i,,m) if (a[dep][i].k==){
data &c=a[dep][i];
int x=find(c.x),y=find(c.y);
if (x!=y) fa[x]=y;
}
rep(i,,n) np[i]=;
int nn=,nm=;
rep(i,,n) if (!np[find(i)]) np[find(i)]=++nn;
rep(i,,m) if (a[dep][i].k) {
data c=a[dep][i];
int x=find(c.x),y=find(c.y);
a[dep][++nm]=(data){np[x],np[y],c.id,c.k,};
}
int mid=(l+r)/;
cdq(dep+,l,mid,nn,nm);
cdq(dep+,mid+,r,nn,nm);
}
int main(){
n=read(); m=read();
int x,y;
rep(i,,m){
x=read(); y=read();
a[][i]=(data){x,y,i,,};
}
Q=read();
rep(i,,Q){
b[i][]=read();
rep(j,,b[i][]) b[i][j]=read();
}
cdq(,,Q,n,m);
return ;
}

BZOJ3237: [Ahoi2013]连通图的更多相关文章

  1. [BZOJ3237][AHOI2013]连通图(分治并查集)

    3237: [Ahoi2013]连通图 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1736  Solved: 655[Submit][Status ...

  2. bzoj3569 DZY Loves Chinese II & bzoj3237 [AHOI2013] 连通图

    给一个无向连通图,多次询问,每次询问给 k 条边,问删除这 k 条边后图的连通性,对于 bzoj3237 可以离线,对于 bzoj3569 强制在线 $n,m,q \leq 500000,k \leq ...

  3. BZOJ3237:[AHOI2013]连通图(线段树分治,并查集)

    Description Input Output Sample Input 4 5 1 2 2 3 3 4 4 1 2 4 3 1 5 2 2 3 2 1 2 Sample Output Connec ...

  4. BZOJ3237 AHOI2013连通图(线段树分治+并查集)

    把查询看做是在一条时间轴上.那么每条边都有几段存在时间.于是线段树分治就好了. 然而在bzoj上t掉了,不知道是常数大了还是写挂了. 以及brk不知道是啥做数组名过不了编译. #include< ...

  5. 2018.10.01 bzoj3237: [Ahoi2013]连通图(cdq分治+并查集)

    传送门 cdq分治好题. 对于一条边,如果加上它刚好连通的话,那么删掉它会有两个大集合A,B.于是我们先将B中禁用的边连上,把A中禁用的边禁用,再递归处理A:然后把A中禁用的边连上,把B中禁用的边禁用 ...

  6. BZOJ 3237([Ahoi2013]连通图-cdq图重构-连通性缩点)

    3237: [Ahoi2013]连通图 Time Limit: 20 Sec   Memory Limit: 512 MB Submit: 106   Solved: 31 [ Submit][ St ...

  7. BZOJ 3237: [Ahoi2013]连通图

    3237: [Ahoi2013]连通图 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1161  Solved: 399[Submit][Status ...

  8. 线段树分治初步学习&洛谷P5227[AHOI2013]连通图

    线段树分治 其实思想说起来是比较简单的,我们把这个题里的所有操作(比如连边删边查询balabala)全部拍到一棵线段树上,然后对着整棵树dfs一下求解答案,顺便把操作做一下,回溯的时候撤销一下即可.虽 ...

  9. 【bzoj3237】 Ahoi2013—连通图

    http://www.lydsy.com/JudgeOnline/problem.php?id=3237 (题目链接) 题意 给出一个无向图,$Q$组询问,每次询问将原图断掉$C$条边后是否还连通. ...

随机推荐

  1. 安装MongoDB步骤

    1.第一步是从官网下载匹配自己操作系统的安装文件或压缩文件: 2.随便找个文件夹先解压安装文件,然后在C盘根目录建立一个新文件夹命名为mongodb: 3.将打开刚刚安装的文件,将bin文件夹拷贝到C ...

  2. 3.Nginx常用功能介绍

    Nginx常用功能介绍 Nginx反向代理应用实例 反向代理(Reverse Proxy)方式是指通过代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并且从内部网络服 ...

  3. 新手了解.Nat

    1.Net平台 -->.Net平台 -->.Net FrameWrok框架 2.C#编程语言 -->编程语言:计算机能听懂的语言 -->使用.Net平台  C#是在.NEt平台 ...

  4. Java 包装类Integer的值比较

    对于包装类型Integer的值比较与int的值比较是不同的:   public class Java_Val_Compare { public static void main(String[] ar ...

  5. Siamese Network理解

    提起siamese network一般都会引用这两篇文章: <Learning a similarity metric discriminatively, with application to ...

  6. python导入模块时的执行顺序

    当python导入模块,执行import语句时,到底进行了什么操作?按照python的文档,她执行了如下的操作: 第一步,创建一个新的module对象(它可能包含多个module) 第二步,把这个mo ...

  7. 利用lsof恢复进程占用的文件

    说明:经常会遇到这种情况,没有使用正确的方式清理进程占用的文件,比如日志.导致空间并没有释放.也有的时候需要恢复进程占用的文件. 解决方式 lsof |grep del # 找出自己要恢复的文件名称. ...

  8. TurnipBit口袋编程计算机:和孩子一起DIY许愿的流星

    听说对着流星许愿,许的愿望都会实现,虽然不知道这个说法是不是真的,但是流星还是很好看的,为了能一直看到流星,今天就自己做一个流星保存下来,想什么时候看,就什么时候看. 首先需要想象一下流星是什么样子的 ...

  9. Git知识总览(二) git常用命令概览

    上篇博客我们从 git clone 和 git status 两个命令开始,引出了一系列的git操作命令, 请参见:<Git知识总览(一) 从 git clone 和 git status 谈起 ...

  10. Elasticsearch Head插件实践

    简介 Elasticsearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Ap ...