BZOJ3569: 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
解题思路:
考虑到将原图不连通必须切断一个点的所有联通方式
那么可以想到用一种方式来使多个元素互相抵消。
这些元素就是连同一个点的所有边。
那么使这些遍抵消的方式就是让一条边与其他异或和为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(线性基构造)的更多相关文章
- BZOJ3569:DZY Loves Chinese II(线性基)
Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以修能. 遂降临于OI界,欲以神力而凌♂辱众生. 今Dzy有一魞歄图, ...
- 【BZOJ3563/3569】DZY Loves Chinese II 线性基神题
[BZOJ3563/3569]DZY Loves Chinese II Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以 ...
- BZOJ 3569: DZY Loves Chinese II(线性基)
传送门 解题思路 首先构造出一个生成树,考虑不连接的情况.假设连通两点的非树边和树边都断掉后不连通,那么可以给所有的非树边随机一个互不相同的值,然后树边的权值为过他两端点的非树边权值的异或和,这个可以 ...
- BZOJ 3569 DZY Loves Chinese II ——线性基
[题目分析] 腊鸡题目卡题面. 大概的意思就是给一张无向图,每次删掉其中一些边,问是否联通. 首先想到的是Bitset,可以做到n^2/64.显然过不了. 然而这是lyd在给我们讲线性基的时候的一道题 ...
- [BZOJ3569]DZY Loves Chinese II(随机化+线性基)
3569: DZY Loves Chinese II Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1515 Solved: 569[Submit][S ...
- BZOJ3569 DZY Loves Chinese II(随机化+树上差分+线性基)
上一题的强制在线版.对图跑出一个dfs树,给非树边赋上随机权值,树边的权值为覆盖他的非树边权值的异或.这样如果某条树边和覆盖他的非树边都被割掉(即图不连通),他们的异或值就为0.每次对询问看有没有子集 ...
- bzoj3569 DZY Loves Chinese II & bzoj3237 [AHOI2013] 连通图
给一个无向连通图,多次询问,每次询问给 k 条边,问删除这 k 条边后图的连通性,对于 bzoj3237 可以离线,对于 bzoj3569 强制在线 $n,m,q \leq 500000,k \leq ...
- 题解-bzoj3569 DZY Loves Chinese II
Problem bzoj 题意概要:给定\(n\)点\(m\)边无向连通图,\(Q\)次询问删除\(k\)条边后是否仍然连通,强制在线 Solution 半年前考到过这类题目(询问删除任意两条边使得图 ...
- BZOJ3569 : DZY Loves Chinese II
这回是真·强制在线了,首先这道题就是AHOI2013连通图的加强版,那道题k最大只有4 那道题的做法是: 取一个生成树,对每条非树边取一个随机权值, 对每条树边设为“覆盖它的所有非树边”的权值的xor ...
随机推荐
- Memcached 集群环境Java客户端
Memcached 集群环境Java客户端 学习了: http://blog.csdn.net/zhouzhiwengang/article/details/53154112 http://guazi ...
- 4.有关日期格式属性改动常识,v$nls_parameters,between and,查询指定部门的员工信息,in和null,like模糊查询,order by后面能够跟:列名、表达式、别名、序号
1 有关日期格式属性改动常识 NLS_DATE_FORMAT DD-MON-RR select sysdate from dual; NLS_CURRENCY ...
- [Typescript] Build Method decorators in Typescript
To using decorate, we can modifiy tsconfig.json: { "compilerOptions": { ... "experime ...
- C++ 学习笔记(一些新特性总结3)
C++ 学习笔记(一些新特性总结3) public.protected 和 private 继承 public 继承时,基类的存取限制是不变的. class MyClass { public: // ...
- ios xcode真机调试获取屏幕截屏
非常多时候我们须要在调试的过程中把手机屏幕截图发给其它人看,在android开发中我们能够非常方便的截图保存.而xcode开发ios的时候发现这个需求却如此困难.网上大部分都是介绍的以下这个方案.可是 ...
- 《从零開始学Swift》学习笔记(Day 51)——扩展构造函数
创文章.欢迎转载.转载请注明:关东升的博客 扩展类型的时候,也能够加入新的构造函数.值类型与引用类型扩展有所差别.值类型包含了除类以外的其它类型.主要是枚举类型和结构体类型. 值类型扩展构造函数 扩展 ...
- 大话html5应用与app应用优缺点
在这个app横飞的年代,对于整个产品研发团队来讲,高速的迭代,爆炸式的功能追加已经成为了互联网行业的时代标签,以小时甚至分钟为单位的进度度量成为了常态.在这个市场大环境下,浪里淘沙的不单单是商业模式. ...
- Linux中的find命令
.递归查找(find 命令 是递归遍历文件夹的) 命令:find . -name “*.txt” //当前路径下递归查找以.txt结尾的文件夹 .不递归查找 find . -name “*.txt” ...
- Metasploit的三种启动方式
不多说,直接上干货! 注意:博主我用的是Kali linux 2016.2(Rolling). msfcli 的启动 root@kali:~# msfcli -h bash: msfcli: 未找到 ...
- 最标准的 Java MySQL 连接
package com.runoob.test; import java.sql.*; public class MySQLDemo { // JDBC 驱动名及数据库 URL static fina ...