【bzoj3569】 DZY Loves Chinese II
http://www.lydsy.com/JudgeOnline/problem.php?id=3569 (题目链接)
题意
给出一个无向图,$Q$组询问,每次询问将原图断掉$C$条边后是否还连通。在线版。
Solution
神思路。
我们找到这个图的任意一棵生成树,然后对于每条非树边将其的权值赋为一个随机数。
对于每条树边,我们将这条树边的权值设为所有覆盖这条树边的边权的异或和。
那么图不连通当且仅当删除一条树边和覆盖这条树边的所有边集,而由于刚才的处理一条树边和覆盖这条边的所有边集的异或和为零。
于是问题转化成了对于给定的k条边是否存在一个边权的异或和为零的子集,果断高斯消元,由于使用了随机化所以碰撞率极低。
——PoPoQQQ
好像就是tmp大爷上次说的方法,长见识了。
细节
种子设大一点?(这不废话)
代码
// bzoj3569
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
#define inf 2147483640
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std; const int maxn=500010;
int fa[maxn],fe[maxn],head[maxn],c[maxn],cnt,n,m,Q;
struct data {int u,v,w,tp;}d[maxn];
struct edge {int to,next,w;}e[maxn]; int find(int x) {
return fa[x]==x ? x : fa[x]=find(fa[x]);
}
void link(int u,int v,int w) {
e[++cnt]=(edge){v,head[u],w};head[u]=cnt;
e[++cnt]=(edge){u,head[v],w};head[v]=cnt;
}
void dfs(int x,int fa) {
for (int i=head[x];i;i=e[i].next) if (e[i].to!=fa) {
fe[e[i].to]=e[i].w;
dfs(e[i].to,x);
}
}
int Dfs(int x,int fa) {
int tmp=0;
for (int i=head[x];i;i=e[i].next) if (e[i].to!=fa) {
d[e[i].w].w^=Dfs(e[i].to,x);
tmp^=d[e[i].w].w;
}
return tmp;
}
int Gauss(int p) {
for (int now=0,i=1<<30;i;i>>=1) {
int k=now+1;
while (!(c[k]&i) && k<=p) k++;
if (k==p+1) continue;
swap(c[++now],c[k]);
for (int j=1;j<=p;j++) if (j!=now && c[j]&i) c[j]^=c[now];
}
return c[p] ? 1 : 0;
}
int main() {
srand(987532631);
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++) fa[i]=i;
for (int i=1;i<=m;i++) {
scanf("%d%d",&d[i].u,&d[i].v);
if (find(d[i].u)!=find(d[i].v)) {
fa[find(d[i].u)]=find(d[i].v),d[i].tp=1;
link(d[i].u,d[i].v,i);
}
}
dfs(1,0);
for (int i=1;i<=m;i++) if (!d[i].tp) {
d[i].w=rand();
d[fe[d[i].u]].w^=d[i].w;
d[fe[d[i].v]].w^=d[i].w;
}
Dfs(1,0);
scanf("%d",&Q);
for (int ans=0,i=1,k;i<=Q;i++) {
scanf("%d",&k);
for (int j=1;j<=k;j++) scanf("%d",&c[j]),c[j]^=ans;
for (int j=1;j<=k;j++) c[j]=d[c[j]].w;
int pd=Gauss(k);
ans+=pd;
puts(pd ? "Connected" : "Disconnected");
}
return 0;
}
【bzoj3569】 DZY Loves Chinese II的更多相关文章
- 【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 ...
- 【题解】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_ ...
随机推荐
- [Dynamics 365] 关于Currency的一点随笔
在Dynamics CRM中,如果我们要添加一条Currency记录的话. 可选择的Currency Type有<System> ,<Custorm>两种. 如果选择的是< ...
- 20155217《网络对抗》Exp02 后门原理与实践
20155217<网络对抗>Exp02 后门原理与实践 实验要求 使用netcat获取主机操作Shell,cron启动. 使用socat获取主机操作Shell,任务计划启动. 使用MSF ...
- Getting Start chrome-extension demo
写一个小小的chrome扩展demo~ 准备工作 了解一下插件chrome-extension: 在应用商店里的插件基本上都是以.crx为文件后缀,该文件其实就是一个压缩包,包括插件所需要的html. ...
- 20155333 《网络对抗》 Exp5 MSF基础应用
20155333 <网络对抗> Exp5 MSF基础应用 基础问题回答 用自己的话解释什么是exploit,payload,encode exploit:攻击手段,是能使攻击武器(payl ...
- Python 语言简介
Python是一种计算机程序设计语言.你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网页编程的JavaScript语言等等. 那P ...
- Shiro安全框架学习笔记
一.Shiro框架简单介绍 Apache Shiro是Java的一个安全框架,旨在简化身份验证和授权.Shiro在JavaSE和JavaEE项目中都可以使用.它主要用来处理身份认证,授权,企业会话管理 ...
- [C#]使用Join与GroupJoin将两个集合进行关联与分组
本文为原创文章.源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称.作者及网址,谢谢! 本文使用的开发环境是VS2017及dotNet4.0,写此随笔的目的是给自己及新开发人员作为参 ...
- 你应该知道Go语言的几个优势
要说起GO语言的优势,我们就得从GO语言的历史讲起了-- 本文由腾讯技术工程官方号发表在腾讯云+社区 2007年,受够了C++煎熬的Google首席软件工程师Rob Pike纠集Robert Grie ...
- node基础:文件系统-文件读取
node的文件读取主要分为同步读取.异步读取,常用API有fs.readFile.fs.readFileSync.还有诸如更底层的fs.read,以及数据流(stream),后面再总结下咯~ 直接上简 ...
- Tortoisegit生成SSH密钥一次性输入密码
一.找到Tortoisegit 的安装目录,进入bin目录下,找到puttygen.exe并打开,点击Generate按钮,会看到上面出现绿色滚动条,此时要不停移动鼠标,进度会比较快,完成后,就会看到 ...