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

Connected
Disconnected
Connected

HINT

N<=100000 M<=200000 K<=100000

Solution

线段树分治,根据询问把每条边存在的时间区间拆成几个区间,然后覆盖到线段树上,最后$DFS$一遍线段树。用带撤销的并查集维护一下连通块个数,到线段树叶子节点的时候根据连通块个数输出答案。

常数有点大……离$TLE$只有$0.3s$……在被卡的边缘疯狂试探……

Code

 #include<iostream>
#include<cstdio>
#include<vector>
#define N (100009)
using namespace std; int n,cnt,m,q,top,u[N<<],v[N<<];
int fa[N],dep[N];
pair<int,int>stack[N];
vector<int>p[N<<],Segt[N<<]; char buf[<<],*p1=buf,*p2=buf,obuf[<<],*O=obuf;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++) inline int read()
{
int x=,w=; char c=getchar();
while (c<'' || c>'') {if (c=='-') w=-; c=getchar();}
while (c>='' && c<='') x=x*+c-'', c=getchar();
return x*w;
} void Update(int now,int l,int r,int l1,int r1,int k)
{
if (l>r1 || r<l1) return;
if (l1<=l && r<=r1) {Segt[now].push_back(k); return;}
int mid=(l+r)>>;
Update(now<<,l,mid,l1,r1,k); Update(now<<|,mid+,r,l1,r1,k);
} int Find(int x)
{
return x==fa[x]?x:Find(fa[x]);
} void DFS(int now,int l,int r)
{
int mid=(l+r)>>,tmp=top;
for (int i=; i<Segt[now].size(); ++i)
{
int x=u[Segt[now][i]],y=v[Segt[now][i]];
int fx=Find(x),fy=Find(y);
if (fx==fy) continue;
if (dep[fx]>dep[fy]) swap(fx,fy);
fa[fx]=fy; dep[fy]+=(dep[fx]==dep[fy]); cnt--;
stack[++top]=make_pair(fx,fy);
}
if (l<r) DFS(now<<,l,mid), DFS(now<<|,mid+,r);
else puts(cnt==?"Connected":"Disconnected");
for (int i=top; i>tmp; --i)
{
int fx=stack[i].first,fy=stack[i].second;
fa[fx]=fx; dep[fy]-=(dep[fx]==dep[fy]); cnt++;
}
top=tmp;
} int main()
{
n=cnt=read(); m=read();
for (int i=; i<=n; ++i) fa[i]=i, dep[i]=;
for (int i=; i<=m; ++i) u[i]=read(), v[i]=read();
q=read();
for (int i=; i<=q; ++i)
{
int c=read();
for (int j=; j<=c; ++j) p[read()].push_back(i);
}
for (int i=; i<=m; ++i)
{
p[i].push_back(q+);
int last=;
for (int j=; j<p[i].size(); ++j)
Update(,,q,last,p[i][j]-,i), last=p[i][j]+;
}
DFS(,,q);
}

BZOJ3237:[AHOI2013]连通图(线段树分治,并查集)的更多相关文章

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

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

  2. 2018.09.30 bzoj4025: 二分图(线段树分治+并查集)

    传送门 线段树分治好题. 这道题实际上有很多不同的做法: cdq分治. lct. - 而我学习了dzyo的线段树分治+并查集写法. 所谓线段树分治就是先把操作分成lognlognlogn个连续不相交的 ...

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

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

  4. 3237: [Ahoi2013]连通图 线段树分治

    题解: cf765f cf671e bzoj4184 bzoj4552 线段树分治裸题 还是介绍一下线段树分治 这个东西其实挺简单但也挺有用的 可以把删除+插入操作变成只有插入(倒着就是删除) 像这一 ...

  5. bzoj4025二分图(线段树分治 并查集)

    /* 思维难度几乎没有, 就是线段树分治check二分图 判断是否为二分图可以通过维护lct看看是否链接出奇环 然后发现不用lct, 并查集维护奇偶性即可 但是复杂度明明一样哈 */ #include ...

  6. BZOJ4025 二分图(线段树分治+并查集)

    之前学了一下线段树分治,这还是第一次写.思想其实挺好理解,即离线后把一个操作影响到的时间段拆成线段树上的区间,并标记永久化.之后一块处理,对于某个节点表示的时间段,影响到他的就是该节点一直到线段树根的 ...

  7. Bzoj1018/洛谷P4246 [SHOI2008]堵塞的交通(线段树分治+并查集)

    题面 Bzoj 洛谷 题解 考虑用并查集维护图的连通性,接着用线段树分治对每个修改进行分治. 具体来说,就是用一个时间轴表示图的状态,用线段树维护,对于一条边,我们判断如果他的存在时间正好在这个区间内 ...

  8. BZOJ 1018: [SHOI2008]堵塞的交通traffic(线段树分治+并查集)

    传送门 解题思路 可以离线,然后确定每个边的出现时间,算这个排序即可.然后就可以线段树分治了,连通性用并查集维护,因为要撤销,所以要按秩合并,时间复杂度\(O(nlog^2 n)\) 代码 #incl ...

  9. [BZOJ4025]二分图(线段树分治,并查集)

    4025: 二分图 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 2191  Solved: 800[Submit][Status][Discuss] ...

随机推荐

  1. kafka消费者启动报错

    报错信息: WARN Fetching topic metadata with correlation id 14 for topics [Set(test)] from broker [Broker ...

  2. spring boot之hello

    自己使用springboot也已经写过一段时间的代码,但是对springboot真正运行的流程还是有点模糊,今天写出自己对springboot的认识,如有不对,还请各位大佬不吝赐教,话不多说,直接上代 ...

  3. html5对于seo有哪些优势

    HTML 5仍是决策,但任何搜索引擎优化专家,谁试图向前看,网站设计HTML 5和将如何影响SEO网站优化是不是不必要的信息有关的一些知识.这是真实的,HTML 5中的变化和新的概念,将影响北京网站制 ...

  4. Grafan+Prometheus 监控 MySQL

    架构图 环境 IP 环境 需装软件 192.168.0.237 mysql-5.7.20 node_exporter-0.15.2.linux-amd64.tar.gz mysqld_exporter ...

  5. Vue2+VueRouter2+webpack 构建项目实战(三):配置路由,运行页面

    制作.vue模板文件 通过前面的两篇博文的学习,我们已经建立好了一个项目.问题是,我们还没有开始制作页面.下面,我们要来做页面了. 我们还是利用 http://cnodejs.org/api 这里公开 ...

  6. css 样式表的书写顺序

    display || visibility list-style : list-style-type || list-style-position || list-style-image positi ...

  7. SAP MM 没有维护MRP 视图的物料可以正常参与采购业务

    SAP MM 没有维护MRP 视图的物料可以正常参与采购业务 Material number: R000006872,没有维护MRP 视图, ​ 也就是没有指定该物料来源是采购还是自制.此种情况下,S ...

  8. web-worker 的使用

    JavaScript采用的是单线程模式,它每次也只能执行一个事件,所以它在加载大量的事件的时候会比较慢. 而web-worker的作用就是给JavaScript提供一个多线程的模式. 注意的是 web ...

  9. springboot 学习之路 6(定时任务)

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

  10. (后端)SQL SERVER 字符串按数字排序

    应用于B1-1,B1-2,B10-1,B11-1 sqlserver肯定不能按照字符串进行排序,需要进行处理一番: select CONVERT(varchar, LEFT(code,1)),conv ...