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中禁用的边禁用 ...
随机推荐
- [译]GC专家系列2:Java 垃圾回收的监控
原文链接:http://www.cubrid.org/blog/dev-platform/how-to-monitor-java-garbage-collection/ 这是"成为GC专家系 ...
- [Oracle]Oracle数据库任何用户密码都能以sysdba角色登入
* 本文相关环境:Windows 10,64位操作系统:Oracle 11gR2:toad for Oracle12.1 最近在学习Oracle数据库,使用Toad for Oracle来查看数据库的 ...
- 35 个必须有的Bootstrap工具和生成器
Bootstraptor If you think that bootstrap templates are not enough for you, you should go with bootst ...
- 在centos 6.4下安装opencv 2.3.1
系统环境介绍: centos 6.4 1.安装依赖包 yum install cmake gcc gcc-c++ gtk+-devel gimp-devel gimp-devel-tools gimp ...
- SelectedValue,SelectedValuePath,SelectedValueBinding,DisplayMemberPath讲解
无论在Winform.WPF.ASP.NET中,数据绑定是我们经常使用的一个重要技术,我们经常会把相关类动态显示绑定到UI界面中,其中有几个比较重要的属性需要大家灵活运用. 那Combox来说明有两个 ...
- MySQL的alter的使用
ALTER TABLE 语句用于在已有的表中添加.修改或删除列 1.ADD [COLUMN] column name (column definitions) [FIRST or AFTER colu ...
- MySQL日期和时间函数
WEEKDAY( date ) 返回date的星期索引( = 星期天 ) . mysql> select WEEKDAY( '1997-10-04 22:23:00' ) ; mysql> ...
- TextBox控件
1.通过设置Multiline属性(bool)来控制文本框是否为多行显示 txt_Change.Location = , );//设置文本框位置 txt_Change.Multiline = true ...
- 【面试题】Https
https原理, 我很难一下子记住, https=http+ssl 先说http, 基于tcp/IP协议 传输,有三次握手 http://blog.csdn*net/xubo_zhang/art ...
- [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)(转)
转载自:http://blog.csdn.net/onlyou930/article/details/9299169 分类: Objective-C2013-07-11 11:54 3420人阅读 评 ...