【BZOJ3569】DZY Loves Chinese II
【BZOJ3569】DZY Loves Chinese II
题面
题目大意:
给你一张\(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的更多相关文章
- 【bzoj3569】 DZY Loves Chinese II
http://www.lydsy.com/JudgeOnline/problem.php?id=3569 (题目链接) 题意 给出一个无向图,$Q$组询问,每次询问将原图断掉$C$条边后是否还连通.在 ...
- 【题解】DZY Loves Chinese
[题解]DZY Loves Chinese II 不吐槽这题面了... 考虑如何维护图的连通性,如果把图的变成一颗的\(dfs\)生成树,那么如果把一个节点的父边和他接下来所有的返祖边删除,那么我们就 ...
- 【BZOJ3563/BZOJ3569】DZY Loves Chinese I/II(随机化,线性基)
[BZOJ3563/BZOJ3569]DZY Loves Chinese I/II(随机化,线性基) 题面 搞笑版本 正经版本 题面请自行观赏 注意细节. 题解 搞笑版本真的是用来搞笑的 所以我们来讲 ...
- 【BZOJ3563/3569】DZY Loves Chinese II 线性基神题
[BZOJ3563/3569]DZY Loves Chinese II Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以 ...
- 【BZOJ 3569】DZY Loves Chinese II 随机化+线性基
用到一个结论——[先建树,再给每个非树边一个权值,每个树边的权值为覆盖他的非树边的权值的异或和,然后如果给出的边存在一个非空子集异或和为0则不连通,否则连通](必须保证每条边的出现和消失只能由自己产生 ...
- 【BZOJ 3569】DZY Loves Chinese II
题面 Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以修能. 遂降临于OI界,欲以神力而凌♂辱众生. 今Dzy有一魞歄图 ...
- 【BZOJ 3569】 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 ...
- 【BZOJ3561】DZY Loves Math VI (数论)
[BZOJ3561]DZY Loves Math VI (数论) 题面 BZOJ 题解 \[\begin{aligned} ans&=\sum_{i=1}^n\sum_{j=1}^m\sum_ ...
随机推荐
- CopyOnWriteArrayList 源码分析 基于jdk1.8
CopyOnWriteArrayList 源码分析: 1:成员属性: final transient ReentrantLock lock = new ReentrantLock(); //内部是 ...
- 【问题记录】ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
一.问题描述 环境:MySQL 8.0 + Windows 由于密码错误或者其他原因导致无法连上MySQL服务,如下图: 二.解决方案 解决该问题的具体步骤如下: 1.关闭MySQL服务 以管理员权限 ...
- 使用 Python 获取 Windows 聚焦图片
Windows 聚焦图片会定期更新,拿来做壁纸不错,它的目录是: %localappdata%\Packages\Microsoft.Windows.ContentDeliveryManager_cw ...
- vs 发版时,在发版的文件夹中,找不到应该有的某个文件
检查:VS中,这个文件右击属性,查看生成操作.如果是“无”,改为“内容”.再重新发布就没问题了. 想看发版出来的内容包括哪些,可以从“发布”--“应用程序文件”查看
- vue v-for 使用问题整理
今天使用v-for指令的时候遇到一个错误 [Vue warn]: Error in render: "TypeError: Cannot read property 'children' o ...
- 【C#进阶学习】泛型
一.泛型引入 需求:传入一个类型(整型/日期/字符串或其他),打印出它的类型和内容. 1.初级版 public class CommonMethod { /// <summary> /// ...
- codeforces467-A水题
题目链接:http://codeforces.com/problemset/problem/467/A A. George and Accommodation time limit per test ...
- kubernetes集群内通过endpoint访问外部服务
kubernetes内的服务访问集群外独立的服务最好通过endpoint方式,例如MySQL 1.创建mysql-service.yaml apiVersion: v1 kind: Service m ...
- linux中find命令的使用详解(转载)
常用命令 find (目录) [-type d | f] (文件夹 | 文件) -name (名称,可使用正则表达式) find /root -name "*core&q ...
- es更新说明(dsl)
一.旧版elasticsearch-dsl 很多同学在python搜索引擎视频中关于看到的第十章elasticsearch使用中使用python创建mapping老师使用的以下代码,这些代码对于ela ...