【题目分析】

腊鸡题目卡题面。

大概的意思就是给一张无向图,每次删掉其中一些边,问是否联通。

首先想到的是Bitset,可以做到n^2/64。显然过不了。

然而这是lyd在给我们讲线性基的时候的一道题目。↓

首先构建dfs树。

发现图不联通的时候,当且仅当删去了树边和所有覆盖它的非树边。

所以对于每一条非树边随机一个权值,然后每条树边为所有覆盖它的非树边的权值的异或。

每次判断是否线性无关即可。

神题!

【代码】

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath> #include <set>
#include <map>
#include <string>
#include <algorithm>
#include <vector>
#include <iostream>
#include <queue> using namespace std; #define maxn 100005
#define maxm 1000005
#define mxle 65
#define ll long long
#define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)
#define inf (0x3f3f3f3f) void Finout()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif
} int Getint()
{
int x=0,f=1; char ch=getchar();
while (ch<'0'||ch>'9') {if (ch=='-') f=-1; ch=getchar();}
while (ch>='0'&&ch<='9') {x=x*10+ch-'0'; ch=getchar();}
return x*f;
} vector <int> v[maxn];
int h[maxm],fr[maxm],to[maxm],ne[maxm],en=0,f[maxn],tag[maxm];
int w[maxm],b[maxm];
int vis[maxm]; void add(int a,int b)
{
fr[en]=a; to[en]=b; ne[en]=h[a]; h[a]=en++;
fr[en]=b; to[en]=a; ne[en]=h[b]; h[b]=en++;
} void dfs1(int o,int fa)
{
vis[o]=1;
for (int i=h[o];i>=0;i=ne[i])
{
if (!vis[to[i]]) dfs1(to[i],o);
else if (!w[i]&&to[i]!=fa)
{
w[i]=w[i^1]=rand()*711;
b[o]^=w[i]; b[to[i]]^=w[i];
}
}
} int n,m; void dfs2(int o)
{
vis[o]=1;
for (int i=h[o];i>=0;i=ne[i])
{
if (!vis[to[i]])
{
dfs2(to[i]);
w[i]=w[i^1]=b[to[i]];
b[o]^=b[to[i]];
}
}
} struct Base{
int lb[mxle];
bool add(int x)
{
D(i,30,0)
{
if ((x>>i)&1)
{
if (!lb[i]) {lb[i]=x;return false;}
else x^=lb[i];
}
}
return true;
}
void init(int x){memset(lb,0,sizeof lb);add(x);}
}bas; int q,x,y; int main()
{
memset(h,-1,sizeof h);
srand(20000416);
Finout();
n=Getint();m=Getint();
F(i,1,m) add(Getint(),Getint());
dfs1(1,0);
memset(vis,0,sizeof vis);
dfs2(1);
int ans=0,flag=0;
q=Getint();
F(i,1,q)
{
flag=0;
x=Getint(); bas.init(0);
F(i,1,x)
{
y=Getint(); y^=ans;
if (bas.add(w[2*y-1])) flag=1;
}
flag^=1;
if (flag) printf("Connected\n");
else printf("Disconnected\n");
ans+=flag;
}
}

  

BZOJ 3569 DZY Loves Chinese II ——线性基的更多相关文章

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

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

  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 树上差分+线性基

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

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

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

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

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

  6. BZOJ 3569 DZY Loves Chinese II

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

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

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

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

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

  9. BZOJ 3563 DZY Loves Chinese

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

随机推荐

  1. c#网站对服务器的数据库的备份与还原

    在网站上备份数据库 1.前台页面 <div> 需要备份的文件名:<asp:TextBox ID="bfFile" runat="server" ...

  2. 仿天猫淘宝的ShopNC好商城原生Android 客户端源码项目

    开发环境:Android Studio 2.0 | Gradle 2.0.0最后更新:2016-04-28 简介:基于好商城V4的Android客户端 目前已完成的功能(概述): 1.启动页 -> ...

  3. 关于父类中的this指针的问题

    在处理一个消息推送的问题的时候遇到个小问题,比如A是B的子类,当A生成实例时,会执行父类的构造函数,那么在父类中,this会是什么类型呢? 于是做了个小测试 子类ChildClass: public ...

  4. codeforces Gym 100338H High Speed Trains (递推,高精度)

    递推就好了,用二项式定理算出所有连边的方案数,减去不合法的方案, 每次选出一个孤立点,那么对应方案数就是上次的答案. 枚举选几个孤立点和选哪些,选到n-1个点的时候相当于都不选,只减1. 要用到高精度 ...

  5. 在Solr中配置中文分词IKAnalyzer

    李克华 云计算高级群: 292870151 交流:Hadoop.NoSQL.分布式.lucene.solr.nutch 在Solr中配置中文分词IKAnalyzer 1.在配置文件schema.xml ...

  6. javase(5)_面向对象

    一.概述 1.面向对象是一种思想,让我们由执行者变成指挥者,执行者是面向过程,指挥者是面向对象.例如人开冰箱门,开冰箱门这个动作应该属于门而不是人,冰箱自己最清楚门应该怎么开,人只是调用了冰箱的这个动 ...

  7. Spring框架针对dao层的jdbcTemplate操作crud之delete删除数据库操作 Spring相关Jar包下载

    首先,找齐Spring框架中IoC功能.aop功能.JdbcTemplate功能所需的jar包,当前13个Jar包 1.Spring压缩包中的四个核心JAR包,实现IoC控制反转的根据xml配置文件或 ...

  8. javascript基础知识 (八) BOM学习笔记

    一.什么是BOM      BOM(Browser Object Model)即浏览器对象模型.      BOM提供了独立于内容 而与浏览器窗口进行交互的对象:      由于BOM主要用于管理窗口 ...

  9. Sql语句的一些事(一)

    (1)LIMIT子句(MySql) ----LIMIT 子句用于规定要返回的记录的数目,一般和Order By一起使用 经常用于数据的分页查询,但是一旦数据量一大,limit的性能就会急速下降 格式: ...

  10. struct 区别 在C 和C++ 中

    C语言中:   Struct是用户自定义数据类型(UDT).   C++语言中:   Struct是抽象数据类型(ADT),支持成员函数的定义.       在C++中,struct的成员的默认访问说 ...