【BZOJ3563/3569】DZY Loves Chinese II 线性基神题
【BZOJ3563/3569】DZY Loves Chinese II
Description
Input
Output
Sample Input
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
Disconnected
HINT
N≤100000 M≤500000 Q≤50000 1≤K≤15
数据保证没有重边与自环
题解:BZ3563真的是一道doubi题啊~~~
但是BZ3569页真是够神的,看了题解——还有这种操作?
好吧我从做题人的角度来分析一下这道题。
我们依旧是利用DFS树的优秀性质,先求出DFS树,然后整棵树不联通当且仅当存在一条树边,使得它和所有覆盖它的非树边都被切掉(覆盖一条边:指的是将这条树边切掉、整棵树形成两个部分后,跨越这两个部分的非树边)。
那么我们强行往线性基上去构造,我们的目的就是使得:一旦存在某条树边和所有覆盖它的非树边都被切掉,那么就存在一个子集满足异或和为0,否则没有。
然后就容易去构造了,直接给每条非树边都赋一个随机权值,然后每条树边的权值就是所有覆盖它的非树边的权值的异或和。但我们怎样才能求出这个异或和呢?其实打一个标记,再DFS一次就行了,自己yy一下?
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cstdlib>
using namespace std;
int n,m,q,cnt,tot,ans;
int to[1000010],next[1000010],head[100010],val[500010],tag[100010],vis[100010],v[20];
int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-')f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret*f;
}
void dfs1(int x,int fa)
{
vis[x]=1;
for(int i=head[x];i!=-1;i=next[i])
{
if(to[i]==fa||val[i>>1]) continue;
if(vis[to[i]]!=1) dfs1(to[i],x);
else val[i>>1]=rand()*rand(),tag[to[i]]^=val[i>>1],tag[x]^=val[i>>1];
}
}
void dfs2(int x,int fa)
{
vis[x]=2;
for(int i=head[x];i!=-1;i=next[i])
{
if(to[i]==fa) continue;
if(vis[to[i]]!=2) dfs2(to[i],x),val[i>>1]=tag[to[i]],tag[x]^=tag[to[i]];
}
}
int gauss()
{
int i,j;
tot=0;
for(i=1<<30;i;i>>=1)
{
for(j=++tot;j<=v[0];j++) if(v[j]&i)
{
swap(v[j],v[tot]);
break;
}
if(!(v[tot]&i))
{
tot--;
continue;
}
for(j=1;j<=v[0];j++) if(j!=tot&&(v[j]&i)) v[j]^=v[tot];
}
if(tot==v[0])
{
printf("Connected\n");
return 1;
}
else
{
printf("Disconnected\n");
return 0;
}
}
void add(int a,int b)
{
to[cnt]=b,next[cnt]=head[a],head[a]=cnt++;
}
int main()
{
srand(2333666);
n=rd(),m=rd();
int i,j,a,b;
memset(head,-1,sizeof(head));
for(i=1;i<=m;i++) a=rd(),b=rd(),add(a,b),add(b,a);
dfs1(1,0),dfs2(1,0);
q=rd();
for(i=1;i<=q;i++)
{
memset(v,0,sizeof(v));
v[0]=rd();
for(j=1;j<=v[0];j++) v[j]=val[(rd()^ans)-1];
ans+=gauss();
}
return 0;
}
【BZOJ3563/3569】DZY Loves Chinese II 线性基神题的更多相关文章
- BZOJ 3569 DZY Loves Chinese II ——线性基
[题目分析] 腊鸡题目卡题面. 大概的意思就是给一张无向图,每次删掉其中一些边,问是否联通. 首先想到的是Bitset,可以做到n^2/64.显然过不了. 然而这是lyd在给我们讲线性基的时候的一道题 ...
- BZOJ 3569: DZY Loves Chinese II(线性基)
传送门 解题思路 首先构造出一个生成树,考虑不连接的情况.假设连通两点的非树边和树边都断掉后不连通,那么可以给所有的非树边随机一个互不相同的值,然后树边的权值为过他两端点的非树边权值的异或和,这个可以 ...
- BZOJ3569:DZY Loves Chinese II(线性基)
Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以修能. 遂降临于OI界,欲以神力而凌♂辱众生. 今Dzy有一魞歄图, ...
- BZOJ3569: DZY Loves Chinese II(线性基构造)
Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以修能. 遂降临于OI界,欲以神力而凌♂辱众生. 今Dzy有一魞歄图, ...
- BZOJ 3569 DZY Loves Chinese II 树上差分+线性基
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3569 Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅 ...
- BZOJ 3569: DZY Loves Chinese II [高斯消元XOR 神题]
http://www.lydsy.com/JudgeOnline/problem.php?id=3569 题意:多次询问一个无向连通图当图中某k条边消失时这个图是否联通 强制在线 太神啦啦啦啦啦啦啦啦 ...
- [BZOJ3563&3569]DZY Loves Chinese
bzoj 加强版 sol 其实前一题还有一种解法的,具体方法请见bzoj讨论版. 以下是正解(?) 建一棵生成树. 考虑什么时候图会不连通:当且仅当存在一条树边被删除,同时所有覆盖了他的非树边也被删除 ...
- BZOJ 3569 DZY Loves Chinese II
Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以修能. 遂降临于OI界,欲以神力而凌♂辱众生. 今Dzy有一魞歄图,其上 ...
- bzoj 3569 DZY Loves Chinese II 随机算法 树上倍增
题意:给你一个n个点m条边的图,有若干组询问,每次询问会选择图中的一些边删除,删除之后问此图是否联通?询问之间相互独立.此题强制在线. 思路:首先对于这张图随便求一颗生成树,对于每一条非树边,随机一个 ...
随机推荐
- 微博(MicroBlog)
ylbtech_Miscellaneos Inner 新浪微博 www.weibo.com 搜狐微博 http://t.sohu.com 网易微博 http://t.163.com/session ...
- dom元素父子容器互相调用控制
在html中普通的父容器调用子容器中的方法十分简单 因为这两个容器的所有方法和属性都在同一个dom模型中 可以直接控制和使用 但是如果子容器中是一个iframe标签又是怎样的情况? iframe请求另 ...
- Nginx include和Nginx指令的使用
Nginx include和Nginx指令的使用 1.nginx include 主配置文件nginx.conf中指定包含其他扩展配置文件,从而简化nginx主配置文件,实现多个站点功能 [root@ ...
- 分组password算法
代换,S盒.扩散和混淆,这些概念构成了分组password学的基础. 假设明文和密文的分组长度都为n比特,则明文的每个分组都有2n个可能的取值; 代换: 为使加密运算可逆(即解密运算可行),明文的每个 ...
- C语言结构体及函数传递数组參数演示样例
注:makeSphere()函数返回Sphere结构体,main函数中.调用makeSphere()函数,传递的第一个參数为数组,传递的数组作为指针.
- java读取clob字段的几种方法
http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380143fd3d1027fa3c215cc790f1a06 ...
- .Net、C# 汉字转拼音,简体繁体转换方法
Visual Studio International Pack 包含一组类库,该类库扩展了.NET Framework对全球化软件开发的支持.使用该类库提供的类,.NET 开发人员可以更方便的创建支 ...
- SpringCloud系列二:硬编码实现简单的服务提供者与服务消费者
从本文开始,以一个电影售票系统为例讲解Spring Cloud 1. 版本 jdk:1.8 SpringBoot:2.0.0.RELEASE SpringCloud:Finchley.M8 2. 系统 ...
- [LeetCode]Palindrome Number 推断二进制和十进制是否为回文
class Solution { public: bool isPalindrome2(int x) {//二进制 int num=1,len=1,t=x>>1; while(t){ nu ...
- 初始化map和list的两种写法
第一种方法(常用方法): //初始化List List list = new ArrayList(); list.add("string1"); list.add("st ...