【题解】DZY Loves Chinese II

不吐槽这题面了...

考虑如何维护图的连通性,如果把图的变成一颗的\(dfs\)生成树,那么如果把一个节点的父边和他接下来所有的返祖边删除,那么我们就可以确定图的连通性改变了。

考虑如何快速维护这个东西。

可以考虑这样

  • 对于每条非树边,给他一个随机数的权值。
  • 对于每条树边,他的权值是横跨他的所有非树边的\(xor\)和。

那么也就是说,将非树边的状态通过\(xor\)压缩2到其他树边上了。树边的权值是由与他有关的非树边决定的。

查询的时候建基底,如果有数到最后被基底表示出来了,连通性就发生了变化。

正确性(忽略随机数的影响)我不知道怎么说,分情况讨论吧。

  • 假设多条权值一样的在集合内

    • 可能都是树边->权值一样代表这些点在一条链上,一条链断开了\(\ge 2\)条边,就算有一条非树边的帮助,肯定发生了连通性的改变。

    • 可能有一条返祖边->树边的后路被切断了,切掉这两条边后,肯定有节点脱节了。

  • 假设不存在多条权值一样的在几何内,但是有的权值被线性基表示出来了

    • 说明有至少一个点,横跨他的所有返祖边都被切断了,自己的树边也被切断了。
  • 假设这些点是线性无关的,不存在被表示出来的情况

    • 说明不存在有点的返祖边和树边被同时切断,说明图的连通性没有改变。

这道题其实也启示了我们一个做题的技巧,可以利用线性基将许多状态都压缩起来。

最终时间复杂度\(O(32qk)\)很快了

#include<bits/stdc++.h>
using namespace std;
#define RP(t,a,b) for(register int t=(a),edd_=(b);t<=edd_;(t)++)
#define DRP(t,a,b) for(int t=(a),edd_=(b);t>=edd_;(t)--)
#define ERP(t,a) for(register int t=head[a];t!=-1;t=e[t].nx)
#define TMP template < class ccf>
typedef long long ll;
#define Max(a,b) ((a)>(b)?(a):(b)) TMP inline ccf qr(ccf b) {
char c=getchar();
int q=1;
ccf x=0;
while(c<48||c>57)
q=c==45?-1:q,c=getchar();
while(c>=48&&c<=57)
x=x*10ll+c-48,c=getchar();
return q==-1?-x:x; }
const int maxm=500005;
const int maxn=100005;
struct E {
int to,nx;
} e[maxm<<1];
int cnt(1);
int head[maxn];
inline void add(int fr,int to,bool f) {
cnt++;
e[cnt].to=to;
e[cnt].nx=head[fr];
head[fr]=cnt;
if(f)
add(to,fr,0);
}
int ew[maxm];
int dfn[maxn];
int had[maxn];
int timer; void dfs(int now,int last) {
dfn[now]=++timer;
ERP(t,now) {
if(e[t].to!=last) {
if(!dfn[e[t].to]) {
dfs(e[t].to,now);
had[now]^=had[e[t].to];
ew[t>>1]=had[e[t].to]; } else if(dfn[now]>dfn[e[t].to]) {
register int x=rand();
ew[t>>1]=x;
had[e[t].to]^=x;
had[now]^=x;
}
}
}
} int base[35];
int num[35];
inline int upd(int x) {
DRP(t,31,1) {
if(x&num[t]) {
if(base[t])
x^=base[t];
else {
base[t]=x;
break;
}
}
}
return x==0;
} int q,n,k,m;
int t1,t2,t3;
int sigma,temp; int main() {
memset(head,-1,sizeof head);
srand(19491001);
num[1]=1;
RP(t,2,32)
num[t]=num[t-1]<<1;
// cout<<(int)'0'<<' '<<(int)'9'<<' '<<(int)'-'<<endl;
n=qr(1);
m=qr(1); RP(t,1,m) {
t1=qr(1);
t2=qr(1);
add(t1,t2,1);
} dfs(1,0); q=qr(1);
RP(t0,1,q) {
k=qr(1);
temp=1;
memset(base,0,sizeof base);
RP(qaqqqq,1,k) {
register int x=ew[qr(1)^sigma];
if(upd(x))
temp=0;
}
sigma+=temp;
if(temp)
puts("Connected");
else
puts("Disconnected");
}
return 0;
}

【题解】DZY Loves Chinese的更多相关文章

  1. 【BZOJ3563/BZOJ3569】DZY Loves Chinese I/II(随机化,线性基)

    [BZOJ3563/BZOJ3569]DZY Loves Chinese I/II(随机化,线性基) 题面 搞笑版本 正经版本 题面请自行观赏 注意细节. 题解 搞笑版本真的是用来搞笑的 所以我们来讲 ...

  2. 【BZOJ3563/3569】DZY Loves Chinese II 线性基神题

    [BZOJ3563/3569]DZY Loves Chinese II Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以 ...

  3. 【BZOJ3569】DZY Loves Chinese II

    [BZOJ3569]DZY Loves Chinese II 题面 bzoj 题目大意: 给你一张\(N(1\leq N\leq 10^5)\)个点\(M(1\leq M\leq 5\times 10 ...

  4. BZOJ 3563 DZY Loves Chinese

    Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以修能. 遂降临于OI界,欲以神力而凌♂辱众生. 今Dzy有一魞歄图,其上 ...

  5. [BZOJ3569]DZY Loves Chinese II(随机化+线性基)

    3569: DZY Loves Chinese II Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1515  Solved: 569[Submit][S ...

  6. 题解-bzoj3569 DZY Loves Chinese II

    Problem bzoj 题意概要:给定\(n\)点\(m\)边无向连通图,\(Q\)次询问删除\(k\)条边后是否仍然连通,强制在线 Solution 半年前考到过这类题目(询问删除任意两条边使得图 ...

  7. 3563: DZY Loves Chinese - BZOJ

    Description神校XJ之学霸兮,Dzy皇考曰JC.摄提贞于孟陬兮,惟庚寅Dzy以降.纷Dzy既有此内美兮,又重之以修能.遂降临于OI界,欲以神力而凌♂辱众生. 今Dzy有一魞歄图,其上有N座祭 ...

  8. BZOJ 3569 DZY Loves Chinese II

    Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以修能. 遂降临于OI界,欲以神力而凌♂辱众生. 今Dzy有一魞歄图,其上 ...

  9. 【BZOJ 3569】 DZY Loves Chinese II

    题目连接: 传送门 题解: 先%一发大佬的题解. 考虑一个图,删除一些边以后不连通的条件为,某个联通块与外界所有连边都被删掉,而不只是生成树中一个树边与所以覆盖它的非树边(很容易举出反例). 那么考虑 ...

随机推荐

  1. STM32命名

    STM32产品命名 示例: STM32 F 100 C 6 T 6 B XXX 1 2 3 4 5 6 7 8 9 从上面的料号可以看出以下信息: ST品牌ARM Cortex-Mx系列内核32位超值 ...

  2. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock'

    原因:找不到mysql.sock文件 解决方法: 1 找到mysql.sock文件位置 echo "show variables" | mysql | grep "soc ...

  3. (转)python装饰器二

    Python装饰器进阶之二 保存被装饰方法的元数据 什么是方法的元数据 举个栗子 def hello(): print('Hello, World.') print(dir(hello)) 结果如下: ...

  4. TensorFlow笔记一 :测试和TFboard使用

    一 .第一个TF python3.6 import tensorflow as tf x=2 y=3 node1=tf.add(x,y,name='node1') node2=tf.multiply ...

  5. Linux系统救援模式应用:单用户模式找回密码

    利用Linux系统救援模式找回密码 方法一: 开机时手要快按任意键,因为默认时间5s grub菜单,只有一个内核,没什么好上下选的,按e键.升级了系统或安装了Xen虚拟化后,就会有多个显示. 接下来显 ...

  6. dockerfile VOLUME 对外暴露目录设置问题

    最近遇到一个特殊问题, 容器对外映射挂载目录 , 发现容器中的目录并没有映射到宿主机上. 后经排查是是镜像中没有指定 volume # 例如 FROM debian:wheezy VOLUME /da ...

  7. mysql:4种时间类型

    insert 12 ================= 养成良好的习惯,除了整形和浮点型不加'',其余都加,包括日期时间型

  8. linux 内核(系统)、函数的理解、宏的程序调试

    1.操作系统 1.1.Linux 内核(系统)的组成的部分: 内核主要有:进程调度.内存管理.虚拟文件系统.网络接口和进程通信五个部分组成. (1)进程调度 进程调度是CPU对多个进程对CPU访问的调 ...

  9. Sqlserver 实际开发中表变量的用法

    在实际的开发中,我们可能遇到的问题是,在一个存储过程里面,我们可能要返回多段sql的结果集,但是最终怎么把多个结果集合成一块呢,那么这个时候临时表变量就来了 declare  @tmp table   ...

  10. iOS中UDP的使用

    // //  ViewController.m //  UDPDemo // //  Created by qianfeng01 on 15-8-13. //  Copyright (c) 2015年 ...