给一个无向连通图,多次询问,每次询问给 k 条边,问删除这 k 条边后图的连通性,对于 bzoj3237 可以离线,对于 bzoj3569 强制在线

$n,m,q \leq 500000,k \leq 15$

sol:

离线的话很好做,xjb 分治就行了,大概就是 bzoj4025 二分图那题改一改,用一个带权并查集维护连通块大小,当然删除时间最大生成树也是可以做的

在线的话,我们需要一些神仙操作

首先,随便搞出这个图的一棵生成树,对于每个非树边,我们给它随机一个权值

然后对于每条树边,我们让它的权值为覆盖它的所有非树边异或和

我们发现图不连通当且仅当一条树边和所有覆盖它的非树边都被删除

因为树边权值 xor 所有覆盖它的非树边权值异或和 = 0

于是问题变成了:“给你一个边集,判断是否有一个子集异或和为 0 ”

这个就要用到线性基的那一套理论

我们知道求线性基的时候可以求出一组极大线性无关集

看这个线性无关集大小是否为 k 即可

求线性基可以高斯消元

  1. #include<bits/stdc++.h>
  2. #define LL long long
  3. using namespace std;
  4. inline int read()
  5. {
  6. int x = ,f = ;char ch = getchar();
  7. for(;!isdigit(ch);ch = getchar())if(ch == '-') f = -f;
  8. for(;isdigit(ch);ch = getchar())x = * x + ch - '';
  9. return x * f;
  10. }
  11. const int maxn = ;
  12. int n,m;
  13. int first[maxn],to[maxn << ],nx[maxn << ],val[maxn << ],cnt = ;
  14. inline void add(int u,int v)
  15. {
  16. to[++cnt] = v;
  17. nx[cnt] = first[u];
  18. first[u] = cnt;
  19. }
  20. inline void ins(int u,int v){add(u,v);add(v,u);}
  21. int bin[],vis[maxn],v[maxn];
  22. int lastans,a[];
  23. inline void maketree(int x,int fa)
  24. {
  25. vis[x] = ;
  26. for(int i=first[x];i;i=nx[i])
  27. {
  28. if(to[i] == fa)continue;
  29. if(!vis[to[i]])maketree(to[i],x);
  30. else if(!val[i >> ])
  31. {
  32. val[i >> ] = rand();
  33. v[x] ^= val[i >> ];
  34. v[to[i]] ^= val[i >> ];
  35. }
  36. }
  37. }
  38. inline void dfs(int x)
  39. {
  40. vis[x] = ;
  41. for(int i=first[x];i;i=nx[i])
  42. {
  43. if(vis[to[i]])continue;
  44. dfs(to[i]);v[x] ^= v[to[i]];
  45. val[i >> ] = v[to[i]];
  46. }
  47. }
  48. int Gauss_Jordan(int n)
  49. {
  50. int now = ;
  51. for(int i=;i>=;i--)
  52. {
  53. int j = now;
  54. while(j <= n &&!(a[j] & ( << (i - )))) j++;
  55. if(j == n+) continue;
  56. if(j != now) swap(a[now],a[j]);
  57. for(int k=;k<=n;k++)
  58. if(k != now && (a[k] & ( << (i - )))) a[k] ^= a[now];
  59. now++;
  60. }
  61. now--;
  62. return now;
  63. }
  64. int main()
  65. {
  66. srand((unsigned long long)new char);
  67. n = read(),m = read();
  68. for(int i=;i<=m;i++)
  69. {
  70. int u = read(),v = read();
  71. ins(u,v);
  72. }maketree(,);
  73. memset(vis,,sizeof(vis));
  74. dfs();int q = read();
  75. while(q--)
  76. {
  77. int k = read(),top = ;
  78. while(k--)a[++top] = val[read() ^ lastans];
  79. int res = Gauss_Jordan(top);
  80. if(res < top)puts("Disconnected");
  81. else lastans++,puts("Connected");
  82. }
  83. }

bzoj3569 DZY Loves Chinese II & bzoj3237 [AHOI2013] 连通图的更多相关文章

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

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

  2. BZOJ3569 : DZY Loves Chinese II

    这回是真·强制在线了,首先这道题就是AHOI2013连通图的加强版,那道题k最大只有4 那道题的做法是: 取一个生成树,对每条非树边取一个随机权值, 对每条树边设为“覆盖它的所有非树边”的权值的xor ...

  3. 题解-bzoj3569 DZY Loves Chinese II

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

  4. BZOJ3569 DZY Loves Chinese II(随机化+树上差分+线性基)

    上一题的强制在线版.对图跑出一个dfs树,给非树边赋上随机权值,树边的权值为覆盖他的非树边权值的异或.这样如果某条树边和覆盖他的非树边都被割掉(即图不连通),他们的异或值就为0.每次对询问看有没有子集 ...

  5. BZOJ3569:DZY Loves Chinese II(线性基)

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

  6. BZOJ3569: DZY Loves Chinese II(线性基构造)

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

  7. 【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 ...

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

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

  9. 【bzoj3569】 DZY Loves Chinese II

    http://www.lydsy.com/JudgeOnline/problem.php?id=3569 (题目链接) 题意 给出一个无向图,$Q$组询问,每次询问将原图断掉$C$条边后是否还连通.在 ...

随机推荐

  1. iOS拓展:react-native创建工程的坑和解决方法

    正文 首先,在创建工程之前,你需要有环境.这个网上很多,不赘述. 我们直接从创建工程开始,一步步记叙这过程. 坑一 一.打开终端,cd到你放文件的位置(我放在桌面了): yuqideMacBook-A ...

  2. 解决from lxml import etree 导入的时候,显示etree不存在

    问题: 当安装完lxml之后,发现使用 from lxml import etree  时,etree不可用 原因 :是lxml中没有etree包 解决: 去官网下载对应包:官网地址:http://l ...

  3. C语言基础知识【简介】

    C 简介1.关于 CC 语言是为了编写 UNIX 操作系统而被发明的.C 语言是以 B 语言为基础的,B 语言大概是在 1970 年被引进的.C 语言标准是于 1988 年由美国国家标准协会(ANSI ...

  4. ASP.NET MVC + ADO.NET EF 项目实战(一):应用程序布局设计

    什么叫上下文? 在你设计一个方法的时候,无法直接从方法参数或实例成员(字段或属性)获得的所有信息都是上下文.例如: 当前用户是谁? 刚才提供操作的数据库连接实例从哪里拿到? 这个方法从哪个 View ...

  5. nginx学习之反向代理篇(六)

    在本节,你将学会: --如何根据不同的协议,将请求转发到后端服务器: --修改发送到后端服务器的请求头: --以及配置是否buffering从后端服务器返回来的响应. 1. 将请求转发给后端服务器 当 ...

  6. zabbix 主机组管理

    分组的目的是将同一属性的主机归类,主机组中可以包含主机,也可以包含模板 建议:同一属性的主机或者模板,尽量归纳到分组中方便以后管理.分组原则如下: 以地理位置进行划分 以业务划分 以机器用途划分 以系 ...

  7. js面对对象编程

    说到js,非常大一部分人会说我非常熟悉,在日常的web开发中经经常使用,那么你的js代码是符合面对对象思路的吗?那你会问我面向过程的js代码有什么不好吗?我的感受是面对对象的js编码更加简洁,降低了混 ...

  8. ABAP动态生成经典应用之Dynamic SQL Excute 程序

    [转自http://blog.csdn.net/mysingle/article/details/678598]开发说明:在SAP的系统维护过程中,有时我们需要修改一些Table中的数据,可是很多Ta ...

  9. sap ftp 处理

    [转] SAP FTP Function 本文示例如何使用SAP FTP Function将文件从应用服务器传输到另外一个FTP服务器上. DATA: BEGIN OF ig_ftp_result O ...

  10. 【转】kalman滤波

    Kalman Filter是一个高效的递归滤波器,它可以实现从一系列的噪声测量中,估 计动态系统的状态.广泛应用于包含Radar.计算机视觉在内的等工程应用领域,在控制理论和控制系统工程中也是一个非常 ...