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

解题思路:

考虑到将原图不连通必须切断一个点的所有联通方式

那么可以想到用一种方式来使多个元素互相抵消。

这些元素就是连同一个点的所有边。

那么使这些遍抵消的方式就是让一条边与其他异或和为0

这就需要线性无关组了。

Dfs出一颗树。

将非树边的每一条边rand上一个权值,

那么这条边能做出贡献的位置就是Dfs树上祖先的位置。

那么就向上更新,在树边处的答案就是后面相关边的异或和

最后在查询时暴力插入线性无关组中,

若出现异或和为0的情况就是所有相关的边都被删除了。

就是不连通了。

代码:

 #include<ctime>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
void ade(int f,int t,int no);
typedef long long lnt;
struct pnt{
int hd;
int fa;
lnt val;
}p[];
struct ent{
int twd;
int lst;
int blg;
}e[];
struct edge{
int f,t;
lnt val;
bool vis;
void Insert(int no)
{
scanf("%d%d",&f,&t);
ade(f,t,no);
ade(t,f,no);
}
}ede[];
lnt b[];
int n,m;
int cnt;
int Q;
int lstans;
void ade(int f,int t,int no)
{
cnt++;
e[cnt].twd=t;
e[cnt].blg=no;
e[cnt].lst=p[f].hd;
p[f].hd=cnt;
return ;
}
void B_(int x,int f)
{
p[x].fa=f;
for(int i=p[x].hd;i;i=e[i].lst)
{
int to=e[i].twd;
if(p[to].fa)continue;
ede[e[i].blg].vis=true;
B_(to,x);
}
return ;
}
void C_(int x,int f)
{
for(int i=p[x].hd;i;i=e[i].lst)
{
int to=e[i].twd;
if(p[to].fa==x);else continue;
C_(to,x);
ede[e[i].blg].val^=p[to].val;
p[x].val^=p[to].val;
}
return ;
}
bool Insert(lnt x)
{
for(int i=;i>=;i--)
{
if(x&(1ll<<i))
{
if(b[i]==)
{
b[i]=x;
return true;
}else x^=b[i];
}
}
if(!x)return false;
return true;
}
int main()
{
// freopen("a.in","r",stdin);
srand(time(NULL));
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)ede[i].Insert(i);
B_(,);
for(int i=;i<=m;i++)
{
if(ede[i].vis)continue;
ede[i].val=rand()+;
p[ede[i].f].val^=ede[i].val;
p[ede[i].t].val^=ede[i].val;
}
C_(,);
scanf("%d",&Q);
while(Q--)
{
int k;bool flag=false;
scanf("%d",&k);
memset(b,,sizeof(b));
for(int i=;i<=k;i++)
{
int x;
scanf("%d",&x);x^=lstans;
if(!Insert(ede[x].val))flag=true;
}
if(flag)
{
puts("Disconnected");
}else{
puts("Connected");
lstans++;
}
}
return ;
}

BZOJ3569: DZY Loves Chinese II(线性基构造)的更多相关文章

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

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

  2. 【BZOJ3563/3569】DZY Loves Chinese II 线性基神题

    [BZOJ3563/3569]DZY Loves Chinese II Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以 ...

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

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

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

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

  5. [BZOJ3569]DZY Loves Chinese II(随机化+线性基)

    3569: DZY Loves Chinese II Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1515  Solved: 569[Submit][S ...

  6. BZOJ3569 DZY Loves Chinese II(随机化+树上差分+线性基)

    上一题的强制在线版.对图跑出一个dfs树,给非树边赋上随机权值,树边的权值为覆盖他的非树边权值的异或.这样如果某条树边和覆盖他的非树边都被割掉(即图不连通),他们的异或值就为0.每次对询问看有没有子集 ...

  7. bzoj3569 DZY Loves Chinese II & bzoj3237 [AHOI2013] 连通图

    给一个无向连通图,多次询问,每次询问给 k 条边,问删除这 k 条边后图的连通性,对于 bzoj3237 可以离线,对于 bzoj3569 强制在线 $n,m,q \leq 500000,k \leq ...

  8. 题解-bzoj3569 DZY Loves Chinese II

    Problem bzoj 题意概要:给定\(n\)点\(m\)边无向连通图,\(Q\)次询问删除\(k\)条边后是否仍然连通,强制在线 Solution 半年前考到过这类题目(询问删除任意两条边使得图 ...

  9. BZOJ3569 : DZY Loves Chinese II

    这回是真·强制在线了,首先这道题就是AHOI2013连通图的加强版,那道题k最大只有4 那道题的做法是: 取一个生成树,对每条非树边取一个随机权值, 对每条树边设为“覆盖它的所有非树边”的权值的xor ...

随机推荐

  1. 破解APK注入代码大揭秘

    点此了解详细的APK破解及二次打包过程揭秘: http://t.cn/RzEn7UK   [HACK]破解APK并注入自己的代码 会破解是你的本事,但是请不要去干坏事! 使用工具: APKTool 提 ...

  2. Homebrew命令具体解释

    Homebrew命令具体解释 作者:chszs,未经博主同意不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 一.安装Homebrew Shell环境下 ...

  3. 怎样在Ubuntu手机平台中开发Cordova HTML5应用

    我们知道Cordova HTML5应用具有夸平台的特性,同一时候也具有訪问本地一些资源的能力.在今天的这篇文章中.我们将介绍一下怎样创建并执行一个Cordova HTML5的应用到我们的Ubuntu手 ...

  4. linux内核设计的艺术--系统启动第一步

    计算机究竟是如何执行起来的呢,在我学习计算机的时候一直不是非常明确,可是近期借了本<linux内核设计的艺术>算是知道了计算机从按开机到启动操作系统之间究竟做了些什么. 这本书刚開始介绍的 ...

  5. 递归神经网络——就是解决AST这样的问题

    原文:https://zybuluo.com/hanbingtao/note/626300 有时候把句子看做是词的序列是不够的,比如下面这句话『两个外语学院的学生』: 上图显示了这句话的两个不同的语法 ...

  6. Windows下Python2.7配置OpenCV2.4.10

    所需文件: 1 Python2.7.13 链接: https://www.python.org/downloads/release/python-2713/ 这里选Windows 64位的安装包. 2 ...

  7. SparkSQL基础

    * SparkSQL基础 起源: 1.在三四年前,Hive可以说是SQL on Hadoop的唯一选择,负责将SQL编译成可扩展的MapReduce作业.鉴于Hive的性能以及与Spark的兼容,Sh ...

  8. Oracle中根据表明获取对应表触发器名称

    Select object_name From user_objects a left join all_triggers b on a.object_Name = b.trigger_name wh ...

  9. SQL SERVER中求上月、本月和下月的第一天和最后一天

    1.上月的第一天 SELECT CONVERT(CHAR(10),DATEADD(month,-1,DATEADD(dd,-DAY(GETDATE())+1,GETDATE())),111) 2.上月 ...

  10. H5操作WebSQL数据库

    HTML代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset="U ...