【BZOJ3563/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个编号c1~cK:表示K条边,编号为c1~cK
为了体现在线,c1~cK均需异或之前回答为连通的个数

Output

对于每个询问输出:连通则为‘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
数据保证没有重边与自环

题解: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 线性基神题的更多相关文章

  1. BZOJ 3569 DZY Loves Chinese II ——线性基

    [题目分析] 腊鸡题目卡题面. 大概的意思就是给一张无向图,每次删掉其中一些边,问是否联通. 首先想到的是Bitset,可以做到n^2/64.显然过不了. 然而这是lyd在给我们讲线性基的时候的一道题 ...

  2. BZOJ 3569: DZY Loves Chinese II(线性基)

    传送门 解题思路 首先构造出一个生成树,考虑不连接的情况.假设连通两点的非树边和树边都断掉后不连通,那么可以给所有的非树边随机一个互不相同的值,然后树边的权值为过他两端点的非树边权值的异或和,这个可以 ...

  3. BZOJ3569:DZY Loves Chinese II(线性基)

    Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以修能. 遂降临于OI界,欲以神力而凌♂辱众生.   今Dzy有一魞歄图, ...

  4. BZOJ3569: DZY Loves Chinese II(线性基构造)

    Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以修能. 遂降临于OI界,欲以神力而凌♂辱众生.   今Dzy有一魞歄图, ...

  5. BZOJ 3569 DZY Loves Chinese II 树上差分+线性基

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3569 Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅 ...

  6. BZOJ 3569: DZY Loves Chinese II [高斯消元XOR 神题]

    http://www.lydsy.com/JudgeOnline/problem.php?id=3569 题意:多次询问一个无向连通图当图中某k条边消失时这个图是否联通 强制在线 太神啦啦啦啦啦啦啦啦 ...

  7. [BZOJ3563&3569]DZY Loves Chinese

    bzoj 加强版 sol 其实前一题还有一种解法的,具体方法请见bzoj讨论版. 以下是正解(?) 建一棵生成树. 考虑什么时候图会不连通:当且仅当存在一条树边被删除,同时所有覆盖了他的非树边也被删除 ...

  8. BZOJ 3569 DZY Loves Chinese II

    Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以修能. 遂降临于OI界,欲以神力而凌♂辱众生. 今Dzy有一魞歄图,其上 ...

  9. bzoj 3569 DZY Loves Chinese II 随机算法 树上倍增

    题意:给你一个n个点m条边的图,有若干组询问,每次询问会选择图中的一些边删除,删除之后问此图是否联通?询问之间相互独立.此题强制在线. 思路:首先对于这张图随便求一颗生成树,对于每一条非树边,随机一个 ...

随机推荐

  1. Qt自己定义事件实现及子线程向主线程传送事件消息

    近期在又一次学习Qt的时候,由于要涉及到子线程与主线程传递消息,所以便琢磨了一下.顺便把有用的记录下来,方便自己以后查询及各位同仁的參考! 特此声明,本篇博文主要讲述有用的,也就是直接说明怎么实现,就 ...

  2. CPU Cache unCache

    CPU uncache 写就可以了 CPU chace这种flag的话 还要flush过去 不然gpu那边拿到的这块buffer里面没有内容 都是空

  3. HTML5游戏实战(1):50行代码实现正面跑酷游戏

    前段时间看到一个"熊来了"的HTML5跑酷游戏,它是一个典型的正面2D跑酷游戏,这里借用它来介绍一下用Gamebuilder+CanTK开发正面跑酷游戏的基本方法. CanTK(C ...

  4. hive bucket

    转载:https://www.cnblogs.com/end/archive/2013/01/09/2852413.html hive中table可以拆分成partition,table和partit ...

  5. asp.net使用母版页以及Jquery和prototype要注意的问题

    在母版页中引用了js,css或者其他外部文件之后,子页面就不必再重新引用,否则可能出错 prototype.js和jquery.js冲突的解决方案: <script type="tex ...

  6. 右键添加"在此处打开命令窗口"菜单

    Windows Registry Editor Version 5.00  [HKEY_CLASSES_ROOT\Directory\Background\shell\CMD]  @="在此 ...

  7. 测试用例 自动生成工具PICT与AllPairs

    通常我们在设计或编写测试用例时,存在一个"痛点":要么设计的测试用例存在遗漏,难以100%覆盖测试需求:要么被测系统过于复杂,设计的测试用例过多,导致前期的设计和后续的执行工作量过 ...

  8. 【Javascript 基础】对象

    1 创建对象 Javascript 支持对象的概率.有多种方法可以用来创建对象. <!DOCTYPE html> <html lang="en"> < ...

  9. Android 百度地图 简单实现--- 美食搜索

    Android 百度地图 简单实现---  美食 依赖包: 加入 Android 百度依赖包: 1  key:  <!--        开发人员 key --> <meta-dat ...

  10. NGINX 缓存使用指南

    NGINX 缓存使用指南 [proxy_cache] Nginx 一个web缓存坐落于客户端和“原始服务器(origin server)”中间,它保留了所有可见内容的拷贝.如果一个客户端请求的内容在缓 ...