【BZOJ 3569】DZY Loves Chinese II
题面
Description
神校XJ之学霸兮,Dzy皇考曰JC。
摄提贞于孟陬兮,惟庚寅Dzy以降。
纷Dzy既有此内美兮,又重之以修能。
遂降临于OI界,欲以神力而凌♂辱众生。
今Dzy有一魞歄图,其上有N座祭坛,又有M条膴蠁边。
时而Dzy狂WA而怒发冲冠,神力外溢,遂有K条膴蠁边灰飞烟灭。
而后俟其日A50题则又令其复原。(可视为立即复原)
然若有祭坛无法相互到达,Dzy之神力便会大减,于是欲知其是否连通。
Input
第一行N,M
接下来M行x,y:表示M条膴蠁边,依次编号
接下来一行Q
接下来Q行:
每行第一个数K而后K个编号c1cK:表示K条边,编号为c1cK
为了体现在线,c1~cK均需异或之前回答为连通的个数
Output
对于每组询问,输出到输出文件zap.out一个正整数,表示满足条件的整数对数。
对于每个询问输出:连通则为‘Connected’,不连通则为‘Disconnected’
(不加引号)
Sample Input
5 10
2 1
3 2
4 2
5 1
5 3
4 1
4 3
5 2
3 1
5 4
5
1 1
3 7 0 3
4 0 7 4 6
2 2 7
4 5 0 2 13
Sample Output
Connected
Connected
Connected
Connected
Disconnected
Hint
N≤100000 M≤500000 Q≤50000 1≤K≤15
数据保证没有重边与自环
Tip:请学会使用搜索引擎
简明题意
n个点,m条无向边,求断掉k条边后,残图是否仍然联通,强制在线。
题目分析
考虑先构造出原图的一棵生成树,对于每条非树边rand一个权值。
每条树边的权值设为可以与当前边构成回路的边的权值异或和。
那么,如果当前图不连通,当且仅当一条树边被删除且覆盖了这条树边的所有边都被删除了。
此时,这些边的权值异或起来为0。
问题转化为:
给定边中是否存在若干个权值异或起来为0。
此时便可使用线性基求解。
建树
简单的建树操作,任意一棵生成树均可。
注意用\(fa[ ]\)记录父亲,并用\(use[ ]\)记录好哪些是树上的边,方便之后处理。
void Dfs1(int x){
vis[x]=1;
for(int i=h[x];i;i=g[i].next){
int to=g[i].to;
if(vis[to])continue;
use[i>>1]=1,fa[to]=x;
Dfs1(to);
}
}
处理边权
因为此时是一棵树,所以增加一条边会且仅会产生一条回路。
那么,我们给一条非树边的两点附上权值,
在上传的过程中把该权值附给与父亲节点相连的边,这样就可以覆盖至整条回路了。
void Dfs2(int x){
for(int i=h[x];i;i=g[i].next){
int to=g[i].to;
if(fa[to]^x)continue;
Dfs2(to);
e[i>>1].val^=val[to];
val[x]^=val[to];
}
}
for(int i=1;i<=m;i++){
if(use[i])continue;
int x=(LL)rand*rand()%1000000000+1;
e[i].val=x;
val[e[i].x]^=x,val[e[i].y]^=x;
}
代码实现
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdio>
#include<iomanip>
#include<cstdlib>
#include<ctime>
#define MAXN 0x7fffffff
typedef long long LL;
const int N=100005,M=500005;
using namespace std;
inline int Getint(){register int x=0,f=1;register char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}return x*f;}
int h[N],cnt=1;
struct node{int to,next;}g[M<<1];
void AddEdge(int x,int y){g[++cnt].to=y,g[cnt].next=h[x],h[x]=cnt;}
struct Edge{int x,y,val;}e[M];
int fa[N],val[M];
bool vis[N],use[M];
void Dfs1(int x){
vis[x]=1;
for(int i=h[x];i;i=g[i].next){
int to=g[i].to;
if(vis[to])continue;
use[i>>1]=1,fa[to]=x;
Dfs1(to);
}
}
void Dfs2(int x){
for(int i=h[x];i;i=g[i].next){
int to=g[i].to;
if(fa[to]^x)continue;
Dfs2(to);
e[i>>1].val^=val[to];
val[x]^=val[to];
}
}
int p[35];
bool Insert(int x){
for(int i=31;i>=0;i--){
if(!((x>>i)&1))continue;
if(!p[i]){p[i]=x;break;}
x^=p[i];
}
return x>0;
}
int main(){
srand(time(0));
int n=Getint(),m=Getint();
for(int i=1;i<=m;i++){
int x=e[i].x=Getint(),y=e[i].y=Getint();
AddEdge(x,y),AddEdge(y,x);
}
Dfs1(1);
for(int i=1;i<=m;i++){
if(use[i])continue;
int x=(LL)rand()*rand()%1000000000+1;
e[i].val=x;
val[e[i].x]^=x,val[e[i].y]^=x;
}
Dfs2(1);
int Q=Getint(),ans=0;
while(Q--){
int k=Getint();
memset(p,0,sizeof(p));
bool ok=0;
for(int i=1;i<=k;i++){
int x=Getint()^ans;
if(!Insert(e[x].val))ok=1;
}
if(!ok)puts("Connected"),ans++;
else puts("Disconnected");
}
return 0;
}
【BZOJ 3569】DZY Loves Chinese II的更多相关文章
- 【BZOJ 3569】DZY Loves Chinese II 随机化+线性基
用到一个结论——[先建树,再给每个非树边一个权值,每个树边的权值为覆盖他的非树边的权值的异或和,然后如果给出的边存在一个非空子集异或和为0则不连通,否则连通](必须保证每条边的出现和消失只能由自己产生 ...
- 【BZOJ 3569】 DZY Loves Chinese II
题目连接: 传送门 题解: 先%一发大佬的题解. 考虑一个图,删除一些边以后不连通的条件为,某个联通块与外界所有连边都被删掉,而不只是生成树中一个树边与所以覆盖它的非树边(很容易举出反例). 那么考虑 ...
- 【BZOJ3563/3569】DZY Loves Chinese II 线性基神题
[BZOJ3563/3569]DZY Loves Chinese II Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以 ...
- 【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 ...
- 【BZOJ3563/BZOJ3569】DZY Loves Chinese I/II(随机化,线性基)
[BZOJ3563/BZOJ3569]DZY Loves Chinese I/II(随机化,线性基) 题面 搞笑版本 正经版本 题面请自行观赏 注意细节. 题解 搞笑版本真的是用来搞笑的 所以我们来讲 ...
- 【bzoj 3309 】 DZY Loves Math
Description 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0.给定正整数a,b,求 ...
- 【bzoj3569】 DZY Loves Chinese II
http://www.lydsy.com/JudgeOnline/problem.php?id=3569 (题目链接) 题意 给出一个无向图,$Q$组询问,每次询问将原图断掉$C$条边后是否还连通.在 ...
- 【BZOJ 3561】 DZY Loves Math VI
题目: 给定正整数n,m.求 题解: 水题有益身心健康.(博客园的辣鸡数学公式) 其实到这我想强上伯努利数,然后发现$n^2$的伯努利数,emmmmmm 发现这个式子可以算时间复杂度,emmmmm ...
- 【BZOJ 3309】DZY Loves Math
http://www.lydsy.com/JudgeOnline/problem.php?id=3309 \[\sum_{T=1}^{min(a,b)}\sum_{d|T}f(d)\mu(\frac ...
随机推荐
- 解决 使用migrations 执行update-database 出现System.InvalidOperationException: 实例失败的问题
好久没有使用Code First的方式来创建模型了 今天重温了一下 但是出现了很多问题 现在总结一下 在我做完初期的操作的之后,使用 update-database -verbose 更新数据库时, ...
- javaSE Comparable接口中的compareTo()方法
我们都知道,要对自建对象按照一定规则进行排序的话,要求自建对象实现Comparable接口,并重写compareTo() 方法,但compareTo() 方法的释义却不是那么容易搞清楚,下面举例进行阐 ...
- ICPC2008哈尔滨-E-Gauss Elimination
题目描述 Li Zhixiang have already been in “Friendship” ocean-going freighter for three months. The excit ...
- Linux的一些命令总结
启动终端: ctr+alt+t 终端字体放大: ctr+shift+'+',终端字体缩小: ctr+'-' ls: 查看当前目录下的文件信息 pwd: 查看目录所在的路径 touch: 创建文件 mk ...
- Java中实现线程通信的三个方法的作用是什么?
Java提供了3个方法解决线程之间的通信问题,均是java.lang.Object类的方法,都只能在同步方法或者同步代码块中使用,否则会抛出异常. 方法名 作 用 final void wait() ...
- eclipse配置spring4.0环境详细教程
最近几天学习spring框架,在环境搭建过程中遇到了不少问题,网上找了不少资料都不是特别好,所以自己重新记录一下. 准备: 1.Eclipse下载,进官网,这里直接给链接了https://www.ec ...
- HttpClient异常处理手册
HttpClient异常处理手册 开源中国 发表于 2014-08-26 19:44:06 异常处理 HttpClient的使用者在执行HTPP方法(GET,PUT,DELETE等),可能遇到会两种主 ...
- SQL的多表查询(Navicat)
-- 部门表 CREATE TABLE dept ( id INT PRIMARY KEY PRIMARY KEY, -- 部门id dname VARCHAR(50), -- 部门名称 loc VA ...
- mac上安装mamp集成环境
深知mac配置环境是个坑,本人之前用的是xampp因为近期需要mongodb扩展,死活装不明白,索性就换了一个集成环境,在网上找了好多,最后选择了mamp 因为正版的要收费,所以在下载了N个以后终于找 ...
- 【Flutter学习】基本组件之图片组件Image
一,概述 Image(图片组件)是显示图像的组件,一个显示图片的widget,支持图像格式:JPEG,PNG,GIF,动画GIF,WebP,动画WebP,BMP和WBMP. Image组件有多种构造函 ...