bzoj3237
首先我们可以把没有询问过的边处理掉,重构图
当然这样也不影响复杂度
考虑到每次询问要删除的边很少,我们完全可以整体处理
把询问划分成两个集合,在前半部分询问未出现边我们可以整体处理掉,缩点重编号(询问的边和点都要重编号)
然后通过分治继续对前半部分做
然后回来,后半部分我们也可以同样的处理
这样我们要维护一个关于当前边集的栈即可
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的更多相关文章
- 【bzoj3237】 Ahoi2013—连通图
http://www.lydsy.com/JudgeOnline/problem.php?id=3237 (题目链接) 题意 给出一个无向图,$Q$组询问,每次询问将原图断掉$C$条边后是否还连通. ...
- [BZOJ3237][AHOI2013]连通图(分治并查集)
3237: [Ahoi2013]连通图 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1736 Solved: 655[Submit][Status ...
- bzoj3569 DZY Loves Chinese II & bzoj3237 [AHOI2013] 连通图
给一个无向连通图,多次询问,每次询问给 k 条边,问删除这 k 条边后图的连通性,对于 bzoj3237 可以离线,对于 bzoj3569 强制在线 $n,m,q \leq 500000,k \leq ...
- BZOJ3237: [Ahoi2013]连通图
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3237 cdq分治+缩点. 可以每次处理的时候把除l~r之外的边的端点都连起来.然后去跑cdq分 ...
- bzoj3237(cdq+并查集)
这题一眼lct,然而 #include<iostream> #include<cstdio> #include<cmath> #include<cstring ...
- 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 ...
- bzoj3237 cdq分治+可撤销并查集
https://www.lydsy.com/JudgeOnline/problem.php?id=3237 年轻的花花一直觉得cdq分治只能用来降维,不料竟然可以用来分治询问 N<=100000 ...
- BZOJ3237 AHOI2013连通图(线段树分治+并查集)
把查询看做是在一条时间轴上.那么每条边都有几段存在时间.于是线段树分治就好了. 然而在bzoj上t掉了,不知道是常数大了还是写挂了. 以及brk不知道是啥做数组名过不了编译. #include< ...
- 2018.10.01 bzoj3237: [Ahoi2013]连通图(cdq分治+并查集)
传送门 cdq分治好题. 对于一条边,如果加上它刚好连通的话,那么删掉它会有两个大集合A,B.于是我们先将B中禁用的边连上,把A中禁用的边禁用,再递归处理A:然后把A中禁用的边连上,把B中禁用的边禁用 ...
随机推荐
- aix 安装redis
下载最新rpm安装包 http://www.perzl.org/aix/index.php?n=Main.Redis # uname -aAIX rhjf 1 6 00C5CC964C00# pwd/ ...
- [Oracle]Oracle学习小结(1)
1.查看Oracle数据库中的所有用户: (1)使用具有DBA权限的账户登录数据库: (2)执行select username from dba_users. SQL> conn sys 输入口 ...
- VB6-操作数据库
平常搞数据库操作多了就想把经常用的内容放在一起,我也懒,在一本书里的工程例子挑了一个bas,修修改改,凑合这用吧. Public strCnn As String '数据库连接字符串 Public A ...
- UVA 725
Description Write a program that finds and displays all pairs of 5-digit numbers that between them ...
- 2014年辛星完全解读Javascript第四节 流程控制语句
上一节我们介绍了函数,本小节我们介绍一下流程控制语句,对于任何一门编程语言来说,流程控制都是非常重要的,也就是我们常说的顺序结构.选择结构和循环结构. ************选择结构******** ...
- fragment第二次载入就报错
1.布局中加入一个<fragment 标签,第一次载入的时候是正常的,第二次加载的时候,就直接crashed,退出 2.查到原因Caused by: java.lang.IllegalArgum ...
- 使用Entity Framework时要注意的一些性能问题
http://diaosbook.com/Post/2012/12/9/performance-issue-in-select-one-or-few-colums-via-entityframewor ...
- Eclipse中设置作者日期等信息
在使用Eclipse 编写Java代码时,自动生成的注释信息都是按照预先设置好的格式生成的,例如其中author 的属性值. 我们可以在Eclipse 中进行设置自己希望显示的信息. 现在看看如何修改 ...
- iOS runtime 与 runloop
runtime是运行时机制,就是运行到的时候才会执行的机制(类似于栏加载)属于时间先后性质的 runloop 是主线程的运行的意思 属于 (loop) 循环性质的 以下是 具体点的 解释: run ...
- asp.net中js和jquery调用ashx的不同方法分享
代码如下: var xhr = new XMLHttpRequest(); xhr.open("get", 'Controls/gengCart.ashx?C ...