题解-bzoj3569 DZY Loves Chinese II
Problem
题意概要:给定\(n\)点\(m\)边无向连通图,\(Q\)次询问删除\(k\)条边后是否仍然连通,强制在线
Solution
半年前考到过这类题目(询问删除任意两条边使得图不连通的方案数),当时就整场怼这道题,虽然最后怼出来了但其他题根本没拿分。当时觉得这个解法好新颖,特别兴奋自己想出来了,然后做到这道题才发现这类方法都是套路/(ㄒoㄒ)/~~
有关图的连通基本都是建生成树,如果图不连通了,则只有可能切断了树上的一条边后将所有跨越该树边的非树边全部切断
发现不好维护,于是用到这类题的套路,给每条非树边随机一个权值,将对应的树上路径全部\(xor\)上这个权值,则询问时只要看看存不存在非树边集合使得集合权值异或和等于某条树边,然后套用线性基即可
还是做题做得多,套用之前题目的做法就能很容易想到,不像上次考试那样要现场想算法
Code
#include <bits/stdc++.h>
typedef long long ll;
inline void read(int&x){
char c11=getchar();x=0;while(!isdigit(c11))c11=getchar();
while(isdigit(c11))x=x*10+c11-'0',c11=getchar();
}
const int N=101000,M=1001000,K=50;
const ll lim=1ll<<K;
struct Edge{int v,id,nxt;}a[M];
struct edge{int l,r;ll w;bool tree;}e[M];
int head[N],dep[N],fa[N];
int n,m,_;ll tag[N],d[60];
void dfs(int x,int las){
for(int i=head[x];i;i=a[i].nxt)
if(a[i].v!=las)
if(!dep[a[i].v]){
dep[a[i].v]=dep[x]+1;
fa[a[i].v]=x;
dfs(a[i].v,x);
e[a[i].id].tree=true;
}else if(dep[a[i].v]<dep[x]){
ll rd=(ll)rand()*rand()%lim;
tag[x]^=rd,tag[a[i].v]^=rd;
e[a[i].id].w=rd;
}
}
void tag_up(int x){
for(int i=head[x];i;i=a[i].nxt)
if(dep[a[i].v]==dep[x]+1){
tag_up(a[i].v);
e[a[i].id].w=tag[a[i].v];
tag[x]^=tag[a[i].v];
}
}
int main(){
read(n),read(m);
for(int i=1;i<=m;++i){
read(e[i].l),read(e[i].r);
e[i].tree=false;
a[++_].v=e[i].r,a[_].nxt=head[e[i].l],a[_].id=i,head[e[i].l]=_;
a[++_].v=e[i].l,a[_].nxt=head[e[i].r],a[_].id=i,head[e[i].r]=_;
}
dep[1]=1,dfs(1,0);
tag_up(1);
int Q,k,c[20],xor_val=0;
read(Q);while(Q--){
read(k);
for(int i=1;i<=k;++i){
read(c[i]);c[i]^=xor_val;
if(!e[c[i]].tree){
ll x=e[c[i]].w;
for(int j=K;~j;--j)
if(x&(1<<j))
if(d[j])x^=d[j];
else {d[j]=x;break;}
}
}
bool cut=false;
for(int i=1;i<=k;++i)
if(e[c[i]].tree){
ll x=e[c[i]].w;
for(int j=K;~j;--j)
if(x&(1<<j))x^=d[j];
if(!x){cut=true;break;}
}
puts(cut?"Disconnected":"Connected");
xor_val+=(!cut);
}return 0;
}
题解-bzoj3569 DZY Loves Chinese II的更多相关文章
- [BZOJ3569]DZY Loves Chinese II(随机化+线性基)
3569: DZY Loves Chinese II Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1515 Solved: 569[Submit][S ...
- BZOJ3569 DZY Loves Chinese II(随机化+树上差分+线性基)
上一题的强制在线版.对图跑出一个dfs树,给非树边赋上随机权值,树边的权值为覆盖他的非树边权值的异或.这样如果某条树边和覆盖他的非树边都被割掉(即图不连通),他们的异或值就为0.每次对询问看有没有子集 ...
- BZOJ3569:DZY Loves Chinese II(线性基)
Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以修能. 遂降临于OI界,欲以神力而凌♂辱众生. 今Dzy有一魞歄图, ...
- bzoj3569 DZY Loves Chinese II & bzoj3237 [AHOI2013] 连通图
给一个无向连通图,多次询问,每次询问给 k 条边,问删除这 k 条边后图的连通性,对于 bzoj3237 可以离线,对于 bzoj3569 强制在线 $n,m,q \leq 500000,k \leq ...
- BZOJ3569: DZY Loves Chinese II(线性基构造)
Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以修能. 遂降临于OI界,欲以神力而凌♂辱众生. 今Dzy有一魞歄图, ...
- BZOJ3569 : DZY Loves Chinese II
这回是真·强制在线了,首先这道题就是AHOI2013连通图的加强版,那道题k最大只有4 那道题的做法是: 取一个生成树,对每条非树边取一个随机权值, 对每条树边设为“覆盖它的所有非树边”的权值的xor ...
- 【题解】DZY Loves Chinese
[题解]DZY Loves Chinese II 不吐槽这题面了... 考虑如何维护图的连通性,如果把图的变成一颗的\(dfs\)生成树,那么如果把一个节点的父边和他接下来所有的返祖边删除,那么我们就 ...
- 【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 ...
- 【BZOJ3563/3569】DZY Loves Chinese II 线性基神题
[BZOJ3563/3569]DZY Loves Chinese II Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以 ...
随机推荐
- Systemd 添加自定义服务(开机自启动)
Systemd 简介:https://fedoraproject.org/wiki/Systemd/zh-cn 一.service unit 常用命令,以 mysql 服务为例 # 开机启动 syst ...
- Linux拉你入门
前言:为了做一个更优秀的程序猿,Linux是必不可少的,因此利用闲杂的时间来增加自己对Linux的认识 (一)关于Linux命令编(至于怎样安装vmvare这一个章节就先不介绍了) 1.基础命令 1. ...
- bash guide
Table of Contents Basic Operations 1.1. File Operations 1.2. Text Operations 1.3. Directory Operatio ...
- C# Serializable
System.SerializableAttribute 串行化是指存储和获取磁盘文件.内存或其他地方中的对象.在串行化时,所有的实例数据都保存到存储介质上,在取消串行化时,对象会被还原,且不能与其原 ...
- 常见排序算法之python实现
冒泡排序 简介 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数列的工作是重复地进行直到没有再需要交 ...
- 三、文件IO——系统调用
3.1 文件描述符 文件IO 系统调用是不带缓存的,文件 I/O 系统调用不是 ANSI C 的组成部分,是 POSIX 的组成部分. 系统调用与C库: C库函数的IO 的底层还是调用系统调用 I/O ...
- luogu 4145 花神游历各国 线段树/树状数组+并查集
此题一看便是RMQ问题,但是由于开平方的特殊操作,tag操作失效 此时发现特性:sqrt最多执行6此便使值到达1/0,此时可以剪枝不进行该操作,利用并查集到达特性找根,根代表还可以进行操作的点,再利用 ...
- 关于jQuery——attr方法和prop方法获取input的checked属性操作
经常使用jQuery插件的attr方法获取checked属性值,获取的值的大小为未定义,此时可以用prop方法获取其真实值,下面介绍这两种方法的区别: 1.通过prop方法获取checked属性,获取 ...
- 修改输入框placeholder的样式
1. h5页面: //修改placeholder 样式 (chrome,其余类似加前缀) ::-webkit-input-placeholder { color:rgba(21,30,38,0.35) ...
- Tomcat清理日志文件无法立即释放磁盘空间
1 自己删除了Tomcat的日志文件,但是依然显示磁盘百分百占用 进入Tomcat目录显示日志已经删除 查询磁盘空间依旧百分百占用 2 自己杀死Tomcat进程然后重启,成功释放空间 3 原因,通过网 ...