题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3569

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,数据保证没有重边与自环

Tip:请学会使用搜索引擎

题意概述:

  给出一张图,每次假设删除图上K条边,询问图是否连通。

分析:

  这操作还是很厉害的......

  对于图的问题可以借助和图有关的树来分析。

  借助DFS树,我们发现当我们删除一些边的时候,只有我们把某条树边以及所有跨越它的非树边删除掉之后这个图就不连通了。

  那么我先现在需要判断给出的边中有没有这样的一些边出现。如果有,那么图就不连通,否则就依旧连通。

  怎么判断呢?想到异或,当一些线性相关的数字一起出现的时候,它们的其中一些异或和为0。对于每一条非树边,将其随机一个权值,然后对其跨越的所有边异或上它的权值。每一次询问的时候取出来求线性基,如果线性基插入过程中有数字变成了0,说明给出的数字不是线性不相关。

  因为K<=15,所以说可以直接用rand()函数(实在不放心可以手动随机二进制位)。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<queue>
#include<set>
#include<map>
#include<vector>
#include<cctype>
using namespace std;
const int maxn=;
const int maxm=; int N,M,Q;
struct edge{ int to,next; }E[maxm<<];
int first[maxn],np,fl[maxn],delt[maxn],dfn[maxn],dfs_clock,w[maxm],vis[maxn];
struct Linear_Base{
static const int up=;
int b[up];
void init(){ memset(b,,sizeof(b)); }
bool ins(int x){
for(int i=up-;i>=;i--) if((<<i)&x){
if(!b[i]) { b[i]=x; break; }
else x^=b[i];
}
return x!=;
}
}lb; void add_edge(int u,int v)
{
E[++np]=(edge){v,first[u]};
first[u]=np;
}
void data_in()
{
scanf("%d%d",&N,&M);
int x,y;
for(int i=;i<=M;i++){
scanf("%d%d",&x,&y);
add_edge(x,y); add_edge(y,x);
}
scanf("%d",&Q);
}
void DFS(int i,int fp)
{
dfn[i]=++dfs_clock,fl[i]=fp;
for(int p=first[i];p;p=E[p].next){
if(fp==(p-^)+) continue;
int j=E[p].to;
if(dfn[j]){
if(dfn[j]<dfn[i]){
w[p+>>]=rand()+;
delt[i]^=w[p+>>],delt[j]^=w[p+>>];
}
continue;
}
DFS(j,p);
w[fp+>>]^=w[p+>>];
}
w[fp+>>]^=delt[i];
}
void work()
{
srand();
DFS(,);
int k,x,cnt=;
for(int i=;i<=Q;i++){
scanf("%d",&k);
bool ok=; lb.init();
for(int j=;j<=k;j++){
scanf("%d",&x);
if(ok&&!lb.ins(w[x^cnt])) ok=;
}
if(ok) puts("Connected"),cnt++;
else puts("Disconnected");
}
}
int main()
{
data_in();
work();
return ;
}

BZOJ 3569 DZY Loves Chinese II 树上差分+线性基的更多相关文章

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

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

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

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

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

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

  4. BZOJ 3569 DZY Loves Chinese II

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

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

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

  6. BZOJ 3563 DZY Loves Chinese

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

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

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

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

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

  9. 【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 ...

随机推荐

  1. kinect v2

    http://www.tuicool.com/articles/NbmyyeU https://channel9.msdn.com/Blogs/raw-tech/Making-your-body-th ...

  2. C# sqlhelp

    public class SqlHelp { //数据库连接字符串 public static string connectionString = ConfigurationManager.Conne ...

  3. Flask—03-bootstrap与表单

    bootstrap与表单 Bootstrap是美国Twitter公司的设计师Mark Otto和Jacob Thornton合作基于HTML.CSS.JavaScript 开发的简洁.直观.强悍的前端 ...

  4. 关于Ext.js和Ext.Net的杂谈

    最近几年比较火的前端js框架extjs 算是其中的佼佼者.统一的UI设计,强悍的组件及丰富的插件,对浏览器良好的兼容性等优点使得许多公司使用Extjs,同时也使得无数程序猿开始研究这个玩意也包括我在内 ...

  5. hive 学习系列之七 hive 常用数据清洗函数

    1,case when 的利用,清洗诸如评分等的内容,用例如下. case when new.comment_grade = '五星商户' then 50 when new.comment_grade ...

  6. Python全栈day 02

    Python全栈day 02 一.循环语句 while 用法 num = 1 while num <= 10: print(num) num += 1 # 循环打印输出1-10 while el ...

  7. 我的机器学习之路--anaconda环境搭载

    网上许多教程比较晦涩难懂,本教程按照笔者(新手)自己的视角记录,希望给大家一些帮助 1.安装anaconda 目前比较推荐的机器学习环境为anaconda. Anaconda指的是一个开源的Pytho ...

  8. 分布式系统的CAP(Redis)

    CAP理论就是说在分布式存储系统中,最多只能实现上面的两点.而由于当前的网络硬件肯定会出现延迟丢包等问题,所以 分区容忍性是我们必须需要实现的. 所以我们只能在一致性和可用性之间进行权衡,没有NoSQ ...

  9. (数据科学学习手札06)Python在数据框操作上的总结(初级篇)

    数据框(Dataframe)作为一种十分标准的数据结构,是数据分析中最常用的数据结构,在Python和R中各有对数据框的不同定义和操作. Python 本文涉及Python数据框,为了更好的视觉效果, ...

  10. java 单例模式(singleton)

    概念: 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 要点: 1.某个类只有一个实例. 2.它必须自行创建这个示例. 3.必须自行向整个系统提供这个示例. 实现: 1.拥有一个私有的构造器. ...