bzoj3569 DZY Loves Chinese II & bzoj3237 [AHOI2013] 连通图
给一个无向连通图,多次询问,每次询问给 k 条边,问删除这 k 条边后图的连通性,对于 bzoj3237 可以离线,对于 bzoj3569 强制在线
$n,m,q \leq 500000,k \leq 15$
sol:
离线的话很好做,xjb 分治就行了,大概就是 bzoj4025 二分图那题改一改,用一个带权并查集维护连通块大小,当然删除时间最大生成树也是可以做的
在线的话,我们需要一些神仙操作
首先,随便搞出这个图的一棵生成树,对于每个非树边,我们给它随机一个权值
然后对于每条树边,我们让它的权值为覆盖它的所有非树边异或和
我们发现图不连通当且仅当一条树边和所有覆盖它的非树边都被删除
因为树边权值 xor 所有覆盖它的非树边权值异或和 = 0
于是问题变成了:“给你一个边集,判断是否有一个子集异或和为 0 ”
这个就要用到线性基的那一套理论
我们知道求线性基的时候可以求出一组极大线性无关集
看这个线性无关集大小是否为 k 即可
求线性基可以高斯消元
#include<bits/stdc++.h>
#define LL long long
using namespace std;
inline int read()
{
int x = ,f = ;char ch = getchar();
for(;!isdigit(ch);ch = getchar())if(ch == '-') f = -f;
for(;isdigit(ch);ch = getchar())x = * x + ch - '';
return x * f;
}
const int maxn = ;
int n,m;
int first[maxn],to[maxn << ],nx[maxn << ],val[maxn << ],cnt = ;
inline void add(int u,int v)
{
to[++cnt] = v;
nx[cnt] = first[u];
first[u] = cnt;
}
inline void ins(int u,int v){add(u,v);add(v,u);}
int bin[],vis[maxn],v[maxn];
int lastans,a[];
inline void maketree(int x,int fa)
{
vis[x] = ;
for(int i=first[x];i;i=nx[i])
{
if(to[i] == fa)continue;
if(!vis[to[i]])maketree(to[i],x);
else if(!val[i >> ])
{
val[i >> ] = rand();
v[x] ^= val[i >> ];
v[to[i]] ^= val[i >> ];
}
}
}
inline void dfs(int x)
{
vis[x] = ;
for(int i=first[x];i;i=nx[i])
{
if(vis[to[i]])continue;
dfs(to[i]);v[x] ^= v[to[i]];
val[i >> ] = v[to[i]];
}
}
int Gauss_Jordan(int n)
{
int now = ;
for(int i=;i>=;i--)
{
int j = now;
while(j <= n &&!(a[j] & ( << (i - )))) j++;
if(j == n+) continue;
if(j != now) swap(a[now],a[j]);
for(int k=;k<=n;k++)
if(k != now && (a[k] & ( << (i - )))) a[k] ^= a[now];
now++;
}
now--;
return now;
}
int main()
{
srand((unsigned long long)new char);
n = read(),m = read();
for(int i=;i<=m;i++)
{
int u = read(),v = read();
ins(u,v);
}maketree(,);
memset(vis,,sizeof(vis));
dfs();int q = read();
while(q--)
{
int k = read(),top = ;
while(k--)a[++top] = val[read() ^ lastans];
int res = Gauss_Jordan(top);
if(res < top)puts("Disconnected");
else lastans++,puts("Connected");
}
}
bzoj3569 DZY Loves Chinese II & bzoj3237 [AHOI2013] 连通图的更多相关文章
- [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
这回是真·强制在线了,首先这道题就是AHOI2013连通图的加强版,那道题k最大只有4 那道题的做法是: 取一个生成树,对每条非树边取一个随机权值, 对每条树边设为“覆盖它的所有非树边”的权值的xor ...
- 题解-bzoj3569 DZY Loves Chinese II
Problem bzoj 题意概要:给定\(n\)点\(m\)边无向连通图,\(Q\)次询问删除\(k\)条边后是否仍然连通,强制在线 Solution 半年前考到过这类题目(询问删除任意两条边使得图 ...
- 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(线性基构造)
Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以修能. 遂降临于OI界,欲以神力而凌♂辱众生. 今Dzy有一魞歄图, ...
- 【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既有此内美兮,又重之以 ...
- 【bzoj3569】 DZY Loves Chinese II
http://www.lydsy.com/JudgeOnline/problem.php?id=3569 (题目链接) 题意 给出一个无向图,$Q$组询问,每次询问将原图断掉$C$条边后是否还连通.在 ...
随机推荐
- C语言基础知识【循环】
C 循环1.有的时候,我们可能需要多次执行同一块代码.一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推.编程语言提供了更为复杂执行路径的多种控制结构.循环语句允许我 ...
- Laravel开发:多用户登录验证(2)
上一篇讲了最基本的User验证,现在来讲一下Admin的验证. 先贴代码, 路由:routes/web.php加上以下代码, //... Route::get('admin/login', 'Admi ...
- Linux下的目录操作
. 此层目录 .. 上层目录 - 前一个工作目录 ~ 当前用户的工作目录 ~account 表示account的家目录 1.cd:改变目录,change Directory的缩写. 2.pwd:显示当 ...
- css 坑记
1. div 内容超出 (做换行处理) 要注意 white-space属性的运用 设置 div width:100%;(或者固定值) 设置换行 word-break: break-all; 设置 ...
- WCF基础之会话、实例和并发
这篇笔记是一些概念性的东西. 会话,借用百科上的描述就是一个客户与服务器之间的不中断的请求响应序列.wcf的会话模式是通过服务契约的SessionModel进行设置的,其值为枚举,分别为:Allowe ...
- windows环境下JDK1.8安装
jdk的安装,在Windows环境下没有什么特殊的选项,只需要“傻瓜式”安装就行(下一步). 如果说有的话,那就是你安装的路径,默认是c盘下的路径,可以根据自己的喜好,安装到自己的意愿目录: 当然,j ...
- 求阶乘,输入一个正整数 n,输出n!
#include<stdio.h>int factorial (int n); int main(){ int n; scanf("%d",&n); print ...
- 2django 视图与网址进阶
一.在网页中做加减法 采用/add/?a=11&b=22这样get方法进行 django-admin.py startproject zqxt_views cd zqxt_views pyth ...
- 【leetcode刷题笔记】3Sum Closest
Given an array S of n integers, find three integers in S such that the sum is closest to a given num ...
- inline 元素的特性
http://www.maxdesign.com.au/articles/inline/ http://www.w3.org/TR/CSS2/visuren.html#inline-boxes htt ...