首先我们可以把没有询问过的边处理掉,重构图

当然这样也不影响复杂度

考虑到每次询问要删除的边很少,我们完全可以整体处理

把询问划分成两个集合,在前半部分询问未出现边我们可以整体处理掉,缩点重编号(询问的边和点都要重编号)

然后通过分治继续对前半部分做

然后回来,后半部分我们也可以同样的处理

这样我们要维护一个关于当前边集的栈即可

UPD:省队集训的时候听到一种非常神的的随机化做法,摘录如下:

Step1:随便建立一颗生成树;

Step2:对于每一条不在生成树上的边,随机一个64位整数作为这条边的权值;

Step3:对于每条在生成树上的边,定义它的权值为连接他的两个端点对应部分的所有非树边的权值的xor和;

Step4:对于每一组询问,枚举询问中边的子集,如果某个子集所对应的边的权值xor和等于0,则我们可以断言,去掉这些边以后图不连通;否则,去掉这些边不影响图的连通性。

证明我有时间在放上来吧(并不会……),不过很明显这个复杂度随便操cdq分治

 type node=record
x,y:longint;
end;
var e:array[..] of node;
te:array[..] of node;
q:array[..,..] of longint;
h,fa:array[..] of longint;
v,ans:array[..] of boolean;
mh:array[..] of longint;
t,tm,th,n,m,k,i,j:longint; function getf(x:longint):longint;
begin
if fa[x]<>x then fa[x]:=getf(fa[x]);
exit(fa[x]);
end; procedure lab(n,m,l,r:longint);
var i,j,x,y:longint;
begin
for i:= to n do
fa[i]:=i;
for i:= to m do
if not v[i] then
begin
x:=getf(e[i].x); y:=getf(e[i].y);
if x<>y then fa[x]:=y;
end;
th:=;
for i:= to n do
if fa[i]=i then
begin
inc(th);
h[i]:=th;
end;
for i:= to n do
h[i]:=h[getf(i)];
tm:=;
for i:= to m do
if v[i] then
begin
inc(tm);
mh[i]:=tm;
e[tm].x:=h[e[i].x];
e[tm].y:=h[e[i].y];
end;
for i:=l to r do
for j:= to q[i,] do
q[i,j]:=mh[q[i,j]];
end; procedure mark(l,r:longint);
var i,j:longint;
begin
for i:=l to r do
for j:= to q[i,] do
v[q[i,j]]:=true;
end; procedure cdq(n,m,l,r:longint);
var mid,i:longint;
begin
if l=r then
begin
ans[l]:=true;
for i:= to q[l,] do
if e[q[l,i]].x<>e[q[l,i]].y then
begin
ans[l]:=false;
break;
end;
exit;
end;
mid:=(l+r) shr ;
for i:= to m do
begin
inc(t);
te[t]:=e[i]; //te维护边的栈
v[i]:=false;
end;
mark(l,mid);
lab(n,m,l,mid);
cdq(th,tm,l,mid);
for i:=m downto do
begin
e[i]:=te[t];
dec(t);
v[i]:=false;
end;
mark(mid+,r);
lab(n,m,mid+,r);
cdq(th,tm,mid+,r);
end; begin
readln(n,m);
for i:= to m do
readln(e[i].x,e[i].y);
readln(k);
for i:= to k do
begin
read(q[i,]);
for j:= to q[i,] do
read(q[i,j]);
readln;
end;
mark(,k);
lab(n,m,,k);
cdq(th,tm,,k);
for i:= to k do
if ans[i] then writeln('Connected')
else writeln('Disconnected');
end.

bzoj3237的更多相关文章

  1. 【bzoj3237】 Ahoi2013—连通图

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

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

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

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

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

  4. BZOJ3237: [Ahoi2013]连通图

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3237 cdq分治+缩点. 可以每次处理的时候把除l~r之外的边的端点都连起来.然后去跑cdq分 ...

  5. bzoj3237(cdq+并查集)

    这题一眼lct,然而 #include<iostream> #include<cstdio> #include<cmath> #include<cstring ...

  6. 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 ...

  7. bzoj3237 cdq分治+可撤销并查集

    https://www.lydsy.com/JudgeOnline/problem.php?id=3237 年轻的花花一直觉得cdq分治只能用来降维,不料竟然可以用来分治询问 N<=100000 ...

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

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

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

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

随机推荐

  1. 升级python版本导致Django无法使用的解决办法

    运行环境是CentOS6.2 x86_64,在把python从2.6.6升级到2.7.5后,由于环境变量的改变,在python代码中再import django的话将会出现以下报错:   “No mo ...

  2. OFBIZ bug_create-component ERROR

    开发环境:win7 64位 Eclipse 运行create-component,报一下错误: Buildfile: F:\workspace\opensource\apache-obiz\apach ...

  3. Microsoft Office Excel 不能访问文件

    问题描述: Microsoft Office Excel 不能访问文件“XX.xls”.可能的原因有: 1 文件名称或路径不存在.2 文件正被其他程序使用.3 您正要保存的工作簿与当前打开的工作簿同名 ...

  4. MVC使用的MetaModel代码生成器模板

    代码生成器能使从一些重复的工作中缓解下来 在最近开发MVC项目中使用到了MetaModel用来设定Model的显示名称,数据限制的代码生成模板,自己第一做代码生成模板还有很多缺陷. 下面是模板代码: ...

  5. Python拷贝及多进程与类的问题

    最近写python写的尤其不顺利,更多的debug,逐渐的深入,产出却比较少.应该是个瓶颈期,坚持坚持,厚着脸皮也要坚持下去. 0x00 拷贝问题 程序中涉及到多进程和协程,大致的模型是开了2+个进程 ...

  6. 玩转Log4Net

    玩转Log4Net 下载Log4Net 下载地址:http://logging.apache.org/log4net/download_log4net.cgi 把下载的  log4net-1.2.11 ...

  7. 你想建设一个能承受500万PV/每天的网站吗?服务器每秒要处理多少个请求才能应对?

    你想建设一个能承受500万PV/每天的网站吗?服务器每秒要处理多少个请求才能应对? 你想建设一个能承受500万PV/每天的网站吗? 500万PV是什么概念?服务器每秒要处理多少个请求才能应对?如果计算 ...

  8. CSS 命名规范及标题供参考与学习

    一.CSS 命名规范   XHTML-CSS写作建议 所有的xhtml代码小写 属性的值一定要用双引号("")括起来,且一定要有值 每个标签都要有开始和结束,且要有正确的层次 空元 ...

  9. jquery下拉列表选中项改变时获取新选项的属性值

    $("#textSel").change(funtion(){ var selVal=$(this).val(); var selText=$("#textSel opt ...

  10. Titan DB的一些问题

    使用熟悉一点的系统来测试TitanDB,HBASE+ES,记录下来一些小tips. 1.首先TitanDB支持的Hadoop只有1.2.1,所以Hbase自然也只能取到0.98,虽然官网上提供了tit ...