【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_ ...
随机推荐
- ptrace注入型病毒“聊天剽窃手”分析
概述 “聊天剽窃手”Windseeker是一款间谍软件,它使用了ptrace进程注入技术,能够对微信和QQ的聊天记录进行监控. 软件安装后的桌面图标和启动界面如图所示: 行为分析 该应用首先获取手 ...
- 网络对抗技术 2017-2018-2 20155215 Exp9 Web安全基础
1.实践过程 前期准备:WebGoat WebGoat分为简单版和开发板,简单版是个Java的Jar包,只需要有Java环境即可,我们在命令行里执行java -jar webgoat-containe ...
- 2017-2018-2 20155224『网络对抗技术』Exp5:MSF基础应用
基础问题回答 用自己的话解释什么是exploit,payload,encode? exploit就相当于是载具,将真正要负责攻击的代码传送到靶机中,我觉得老师上课举的火箭和卫星的例子非常形象,火箭只是 ...
- C++自学成长之路(第一篇)
今天开始我将开启C++自学成长之路,今天是第一天,在以前就一直在网上查找关于c++的资料,想买一本好一点的,权威一点的资料书,通过努力查找,我选择了c++ primer,在网上这本书的好评如潮.更多的 ...
- 【php增删改查实例】第四节 -自己 DIY 一个数据库管理工具
本节介绍如何自己DIY一个数据库管理工具,可以在页面输入sql 进行简单的增删改查操作. 首先,找到xampp的安装目录,打开htdocs: 新建一个php文件,名称为 mysqladmin.php ...
- Kubernetes学习之路(十九)之Kubernetes dashboard认证访问
Dashboard:https://github.com/kubernetes/dashboard 一.Dashboard部署 由于需要用到k8s.gcr.io/kubernetes-dashboar ...
- Javascript与后台相互访问
(1)Javascript访问C#后台变量或函数 A.通过<%=%>的形式访问 var str = "<%=GetStr() %>"; var str = ...
- how2j 的shiro教程初探
教程案例里的mysql连接器只支持mysql,不支持mariadb,如果用的不是mysql,创建连接时会报错.
- Mvc4_语法基础介绍
@model MvcApplicationTest.Models.User @{ ViewBag.Title = "Index"; } <script type=" ...
- 吴恩达《AI For Everyone》_练习英语翻译_待更新
AI For Everyone https://www.coursera.org/learn/ai-for-everyone 讲师: Andrew Ng (吴恩达) CEO/Founder Landi ...