【BZOJ3569】DZY Loves Chinese II

题面

bzoj

题目大意:

给你一张\(N(1\leq N\leq 10^5)\)个点\(M(1\leq M\leq 5\times 10^5)\)条边的无向图,有\(Q(1\leq Q\leq 5\times 10^4)\)次询问,每次询问问你删去\(K(1\leq K\leq 15)\)条给定边后图的连通性是否改变。

题解

首先有一个很自然的想法就是把这个图的dfs树搞出来(其实随便一棵生成树都行)。

考虑一下怎样删去边会造成连通性改变,就是当一条树边和覆盖它的返祖边全部都被删掉或者两个点的返祖边全被删且他们路径中间有一条边被删的情况。

这样的话,我们可以给每条非树边随机一个权值,树边的权值定为覆盖它的所有非树边的权值的异或和,手玩一下发现上面两种情况对应的异或和为\(0\)。

然后判断的话直接看下给定边集有没有一个子集边权异或和为\(0\)即可,这一点可以用线性基实现。

代码

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <ctime>
using namespace std;
inline int gi() {
register int data = 0, w = 1;
register char ch = 0;
while (!isdigit(ch) && ch != '-') ch = getchar();
if (ch == '-') w = -1, ch = getchar();
while (isdigit(ch)) data = 10 * data + ch - '0', ch = getchar();
return w * data;
}
typedef unsigned long long ull;
const int MAX_N = 1e5 + 5;
struct Graph { int to, next; } e[MAX_N * 10];
int fir[MAX_N], e_cnt;
void clearGraph() { memset(fir, -1, sizeof(fir)); e_cnt = 0; }
void Add_Edge(int u, int v) { e[e_cnt] = (Graph){v, fir[u]}; fir[u] = e_cnt++; }
ull Random() { return (ull)((long double)rand() / RAND_MAX * 1e19); }
ull Xor[MAX_N * 10], val[MAX_N * 10];
int dfn[MAX_N], tim;
void dfs(int x, int fa) {
dfn[x] = ++tim;
for (int i = fir[x]; ~i; i = e[i].next) {
int v = e[i].to; if (v == fa) continue;
if (!dfn[v]) {
dfs(v, x), Xor[x] ^= Xor[v];
val[i] = val[i ^ 1] = Xor[v];
} else if (dfn[v] < dfn[x]) {
val[i] = val[i ^ 1] = Random();
Xor[x] ^= val[i], Xor[v] ^= val[i];
}
}
}
ull bs[64];
bool insert(ull v) {
for (int i = 63; ~i; i--)
if (v >> i & 1ll) {
if (!bs[i]) return bs[i] = v, 1;
v ^= bs[i];
}
return 0;
}
int N, M; int main () {
#ifndef ONLINE_JUDGE
freopen("cpp.in", "r", stdin);
#endif
srand(time(NULL));
clearGraph();
N = gi(), M = gi();
for (int i = 1; i <= M; i++) {
int u = gi(), v = gi();
Add_Edge(u, v), Add_Edge(v, u);
}
dfs(1, 0);
int Q = gi(), tot = 0;
while (Q--) {
memset(bs, 0, sizeof(bs));
int K = gi();
bool flag = 1;
while (K--) {
int num = gi() ^ tot;
if (!insert(val[(num - 1) << 1])) flag = 0;
}
tot += flag;
puts(flag ? "Connected" : "Disconnected");
}
return 0;
}

【BZOJ3569】DZY Loves Chinese II的更多相关文章

  1. 【bzoj3569】 DZY Loves Chinese II

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

  2. 【题解】DZY Loves Chinese

    [题解]DZY Loves Chinese II 不吐槽这题面了... 考虑如何维护图的连通性,如果把图的变成一颗的\(dfs\)生成树,那么如果把一个节点的父边和他接下来所有的返祖边删除,那么我们就 ...

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

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

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

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

  5. 【BZOJ 3569】DZY Loves Chinese II 随机化+线性基

    用到一个结论——[先建树,再给每个非树边一个权值,每个树边的权值为覆盖他的非树边的权值的异或和,然后如果给出的边存在一个非空子集异或和为0则不连通,否则连通](必须保证每条边的出现和消失只能由自己产生 ...

  6. 【BZOJ 3569】DZY Loves Chinese II

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

  7. 【BZOJ 3569】 DZY Loves Chinese II

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

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

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

  9. 【BZOJ3561】DZY Loves Math VI (数论)

    [BZOJ3561]DZY Loves Math VI (数论) 题面 BZOJ 题解 \[\begin{aligned} ans&=\sum_{i=1}^n\sum_{j=1}^m\sum_ ...

随机推荐

  1. Prometheus PromSQL 获取系统服务运行状态

    Prometheus PromSQL 获取系统服务运行状态 使用systemd收集器:--collector.systemd.unit-whitelist=".+" 从system ...

  2. Blend 触发器

    原文:Blend 触发器 介绍用定义触发器来控制视频 的 开始 暂停 继续 停止 触发器设置 效果

  3. C# 用Singleton类构建多线程单例模式

    public sealed class Singleton    {        private static volatile Singleton uniqueInstance;        p ...

  4. 通过Maven发部项目的最实用配置

    一.问题 我们平时开发项目,使用Maven或者Idea部署,尽可能是要做到自动化.一般情况下,做成自动化的方式有多种,下面简述我比较常用的3种. 二.解决方案一: (1)配置发部:使用IDEA自带的A ...

  5. 【微信小程序】抽象组件使用示例

        1.配置页面路径 ./app.json { "pages":[ "pages/index/index", "pages/logs/logs&q ...

  6. JavaScript面向对象①

    什么是对象 对象是一个整体,对外提供一些操作 什么是面向对象 使用对象时,只关注对象提供的功能,不关注其内部细节:比如jQuery 面向对象编程(OOP)的特点(自己理解的特点:把书本上多态放在类继承 ...

  7. 隐马尔科夫模型(Hidden Markov Models) 系列之五

    转自:http://blog.csdn.net/eaglex/article/details/6458541 维特比算法(Viterbi Algorithm) 找到可能性最大的隐藏序列 通常我们都有一 ...

  8. 实验吧——加了料的报错注入(exp报错注入)

    题目地址:http://ctf5.shiyanbar.com/web/baocuo/index.php 先查看页面源码得到提示知道了后台执行的sql语句,很常规的查询 测试了一个报错函数发现如下回显, ...

  9. wamp不能使用phpmyadmin,提示“You don't have permission to access /phpmyadmin/ on this server.”

    当你安装完成wamp后,打开localhost或ip时发现已经可以运行了 但想使用phpmyadmin时,发现提示如下内容: You don't have permission to access / ...

  10. MP构造器

    官方文档:https://baomidou.gitee.io/mybatis-plus-doc/#/wrapper 实体包装器,用于处理 sql 拼接,排序,实体参数查询等! 补充说明: 使用的是数据 ...